08 2013 档案

摘要:已知图中点数n,边数m1.统计每个点的度数d(i)2.枚举参数g的区间[0,m]3.参数精度要求1/(n^2)4.每次枚举参数的建图:源点为S,汇点为T,addedge(from,to,cap)(1)对每条边(x,y) addedge(x,y,1) addedge(y,x,1)(2)对每个点i addedge(S,i,m) addedge(i,T,m+2*g-d(i))(3)做一次最大流,h=maxflow(S,T)5.若h/2>eps l = mid,否则,r = mid6.用求得的low跑一次最大流,从S点dfs所有没有满流的边,给所有非S,T的点标记,这些点就是最后所求得的点。 1 阅读全文
posted @ 2013-08-17 12:28 浙西贫农 阅读(238) 评论(0) 推荐(0)
摘要:作为一个刚入门网络流的弱菜,表示看到这个题,实在建不出图。直接在discuss看的别人怎么建图的。既然看了别人的建图方法,那只能讲讲目前的理解了。题意: 给定一个 n * m 大小的矩阵, 矩阵中每个格子都有一个不大于 1000 的正整数,现在要从矩阵中选出若干个格子, 使得得分最大. 得分等于选取的格子里的数字和. 如果有两个格子相邻, 则得分将减去 2 * (x & y), x 和 y 为相邻两个格子内的数字. 此外, 还有一些格子是必选的.二分图最小点权覆盖的建图方法:建立超级源点S和超级汇点T,对于二分图X,Y中的点,从S向X连一条容量为X权值的边,从Y向T连一条容量为Y权值的 阅读全文
posted @ 2013-08-08 18:32 浙西贫农 阅读(277) 评论(0) 推荐(0)
摘要:白书二代上提到了无源无汇有容量下界网络可行流和有容量下界网络的s-t最大/最小流问题。但是由于本人智商捉鸡,觉得LRJ大神写的似乎不是很好理解,所以只能找一些题目来帮助自己理解理解了。这里直说方法,证明。。。不会。1.无源无汇有容量下界可行流这个问题的解法在周源的那个论文里讲的很清楚了。对于每条边,都有一个容量下界b和一个容量上界c,那么这条边实际的可行流量只有c-b,剩下的b必须满流。对每个点i,求a = sum(流向它的下界流)-sum(从它流出的下界流量)若a>0,从源点0连一条到i的容量为a的边若a 2 #include 3 #include 4 #include 5 #... 阅读全文
posted @ 2013-08-06 20:15 浙西贫农 阅读(441) 评论(0) 推荐(1)
摘要:给这题跪了。先是各种暴栈,然后又是各种WA,看来还是对题目的理解有点问题。题意:给出一张无向图,然后让你在图中加一条边,使得图中剩下的桥最少。思路:求边双连通分量,缩点后形成一棵树。然后求树的最长的两条链(这两条链不能交叉,应该说同根吧)。鄙人跪就跪在重边这里了。如果节点1-2之间有一条重边,则1和2属于同一边双连通分量。。 1 #pragma comment(linker, "/STACK:10240000000,10240000000") 2 #include 3 #include 4 #include 5 #include 6 #include 7 #includ.. 阅读全文
posted @ 2013-08-06 19:38 浙西贫农 阅读(174) 评论(0) 推荐(0)
摘要:题意:给出一张n个点m条边的无向图,然后又q组查询,询问从s节点走到m节点至少要经过多少条桥思路:先dfs找桥,并给所有边-双连通分量蓝色。根据找到的桥以及桥的两端的节点的颜色,重新建图(每个节点代表一个双连通分量,其实就是形成一棵树),dfs一遍求各个点的深度,然后就是离线的求LCA,距离就是dis[u]+dis[v]-2*dis[LCA(u,v)] 1 #include 2 #include 3 #include 4 #include 5 #include 6 #define maxn 100010 7 using namespace std; 8 9 int... 阅读全文
posted @ 2013-08-06 08:53 浙西贫农 阅读(310) 评论(0) 推荐(0)
摘要:看了chenxing老湿的代码,我真心为自己智商捉鸡啊。。一遍dfs搞定啊。。 1 #include 2 #include 3 #define maxn 110 4 int first[maxn],v[maxn*2],next[maxn*2]; 5 int len,e; 6 inline int max(int a,int b){ 7 return a > b ? a : b; 8 } 9 10 void init(){11 e = 0;12 memset(first,-1,sizeof(first));13 }14 15 void add_edge(int a,i... 阅读全文
posted @ 2013-08-05 18:06 浙西贫农 阅读(245) 评论(0) 推荐(0)
摘要:我也搞不懂为什么我每次做这种明明很简单清晰的题目总是会想出那么操蛋的办法,诶。贴个正常的: 1 #include 2 typedef long long LL; 3 LL a[20]; 4 LL count(LL num){ 5 int bit[20],cnt = 0; 6 LL tmp = num; 7 while(tmp > 0){ 8 bit[cnt++] = tmp % 10; 9 tmp /= 10;10 }11 if(cnt == 1) return num - 1;12 LL ans = 9;... 阅读全文
posted @ 2013-08-05 15:02 浙西贫农 阅读(257) 评论(0) 推荐(0)
摘要:最近发现,不写题解不长记性。题意:给出一张带权无向图,然后询问该图的每条边进行询问,若这条边出现在该图的所有最小生成树中,输出any;若这条边可以出现在这张图的某几个最小生成树中,输出at least once;若这条边不会出现在这张图的任意一个最小生成树中,输出none。解法:跟求最小生成树的方法类似,首先将所有边按照权值从小到大排序,一次取出所有边长相等的边,查询每条边的两个节点是否在同一集合中,若不在同一集合中,则在这两个集合间添加一条无向边,同时认为这些边有可能出现在该图的最小生成树中。再做tarjan找桥,找到桥将一定出现在该图的最小生成树中。然后将所有的边的两个端点合并到同一集合, 阅读全文
posted @ 2013-08-02 15:41 浙西贫农 阅读(587) 评论(0) 推荐(0)