上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页
摘要: 题意:给出一颗树和树根,每条树边都有边权,要你砍断一些边,使得所有的叶子节点都与根节点分离,且要求砍断的边权之和最小。以树根root为源点S,添加一个汇点T,对所有的非跟叶子节点i,加边(i,T,inf),求最小割即可。 1 #include 2 #include 3 #include 4 #include 5 #define INF 1<<30 6 #define maxn 1010 7 #define maxm 10000 8 using namespace std; 9 10 int u[maxm],v[maxm],next[maxm],w[maxm];11 int firs 阅读全文
posted @ 2013-10-31 09:56 浙西贫农 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题意:一个国家的地图是一张n个点m条边的有向图。你保卫了国家成为了英雄,现在国王答应给你一些城市。国王居住在首都,编号为1,但他不想随意的到达你的领地,所以你必须破坏一些路,使得从首都到你所拥有的所有城市不连通。而破坏这些路需要花钱。国王给了你f个城市供你选择,每个城市有一个价值。你最后的总收益=你选择的城市的价值之和-破坏路花费的钱。现在让你输出最大的收益,以及完成这样的收益应该破坏哪些路。首先对于表示这个国家地图的有向边(u,v,cost),直接在图中建一条一样的边(u,v,cost)。对于供你选择的城市i,假设它的价值是value,创建一个汇点T,建一条(i,T,value)的边。然后以 阅读全文
posted @ 2013-10-30 22:32 浙西贫农 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张有向图。如果一个节点在图中被删除后,就能使得从S->T不连通,则称这个点key vertex。问这张图中有多少个点是key vertex。网上有两种说法,一种是网络流,就是拆点建图,求最小割,为了限制增广次数,把S、T拆点后的容量限制到2,这样一来跑最大流得到maxflow,如果maxflow=0,则说明全部的点都可以是key vertex,如果maxflow=2,则说明只有S、T是key vertex,如果maxflow=1的话,就需要到残量网络中去找了。怎么找呢?首先从S出发始寻找在残量网络中可以到达的所有的点,把它们保存在一个队列里,并记上vis标记,然后把这个队列里 阅读全文
posted @ 2013-10-30 19:59 浙西贫农 阅读(405) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张无向图,每个点上都有一个权值,然后让你删掉权值之和尽量小的点,使得S到H不连通。无向图带权点连通度问题。每个点拆点,容留为点权,对于原来图中的无向边(u,v),拆成两条边(u',v,inf),(v',u,inf),跑S'到T 的maxflow就可以了。 1 #include 2 #include 3 #include 4 #include 5 #define INF 1<<30 6 #define maxn 210 7 #define maxm 30000 8 using namespace std; 9 10 int v[maxm],next 阅读全文
posted @ 2013-10-30 17:12 浙西贫农 阅读(154) 评论(0) 推荐(0) 编辑
摘要: 题意:有一个n*m的矩阵,里面可以放金蛋也可以放银蛋。分别给出在2个矩阵map1,map2表示在矩阵的每个格子里放金蛋的得分和放银蛋的得分。如果相邻的两个格子里都放了金蛋,则总得分要减去G,如果相邻的两个格子里都放了银蛋,则总得分要减去S。现要求你求出放蛋的最大得分。跟HDU 3657比较像,但是这里更加复杂了,因为两种得分,一种金蛋,一种银蛋。所以我的理解是这里是两个二分图合起来的一个二分图,因为金蛋和银蛋存在一个匹配的关系,给矩阵染色后,黑格和白格也存在一个匹配的关系。因此,这样建图:假设行数i+列数j这和为偶数的格子为黑格,奇数的为白格,每个格子拆成两个点k,k',分别表示放金蛋 阅读全文
posted @ 2013-10-30 16:26 浙西贫农 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 题意:有个人有一种记单词方法,如果一个单词的最后一个字母和另外一个单词的首字母相同,他就同时可以记住,现在他想按照这样的规则把n个单词串起来(就是一个单词的最后一个字母和另外一个单词的首字母相同),有些单词的回文串也是有意义的,因此他既可以正着记,也可以倒着记,现在问他能不能调整那些回文串有意义的单词的正序逆序把这n个单词串起来。混合图的欧拉路径,不是欧拉回路。如果是混合图的欧拉回路问题,在《网络流建模汇总》这篇论文里已经有了具体的方案了。这里需要做的处理就是,如果存在合法路径,而这个路径不构成回路的话,那么我们可以人为的找出起点和终点(就是度数为奇数的点,且只有两个,根据入度出度谁大谁小可以 阅读全文
posted @ 2013-10-29 21:57 浙西贫农 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一个N*M的矩阵,0表示空地,1表示有一只羊,2表示有一只狼,你可以再图上方格的边缘添加单位长度为1的栅栏使得任意的动物都不能通过。问最少添加多少个单位长度为1的栅栏使得狼抓不到羊。是我想的太多了,可能是因为我想少去建条边。其实这里件图建的还是很暴力的。对所有相邻的格子,都建一条cap=1的边,另外,所有有羊的格子,从源点S到羊所在的格子建一条cap=inf的边,对所有有狼的格子,都从有狼的格子到汇点T建一条cap=1的边。求出的最小割容量就是答案。 1 #include 2 #include 3 #include 4 #include 5 #define INF 1 1) ... 阅读全文
posted @ 2013-10-29 14:46 浙西贫农 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 题意:有n个人n个位置。给出一个n*n的矩阵,第i行第j列表示第i个人可以做第j个位置。现在要求每个人都找到一个不同的位置,当他们全部找到各自的位置时,一轮结束,他们可以开始新的一轮。在新的一轮里,每个人同样会去找位置,但是每个人都不会去找原先已经坐过的位置。问一共可以进行多少轮这样的匹配,并输出每一轮的匹配方案。如果不要求输出匹配方案,那好办,跟那个婚姻匹配的一样的办法。现在问题的关键是要求输出每一轮匹配的方案。于是。。就跑了n遍dinic。首先,二分一个mid(轮次),从S到每个人i连一条边(S,i,mid),再从每个位置j到T连一条边(j,T,mid),如果i可以选择j的话,连一条边(i 阅读全文
posted @ 2013-10-28 21:10 浙西贫农 阅读(229) 评论(0) 推荐(0) 编辑
摘要: 题意:给出一张n个点m条边的无向图( 2 2 #include 3 #include 4 #include 5 #include 6 #define INF 1 pii; 11 int v[maxm],next[maxm],w[maxm]; 12 int first[maxn],d[maxn],work[maxn],q[maxn]; 13 int e,S,T,N,M; 14 struct Edge{ 15 int from,to,dist; 16 }edge[100010]; 17 18 void init(){ 19 e = 0; 20 memse... 阅读全文
posted @ 2013-10-27 20:10 浙西贫农 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 有N个男孩,N个女孩。每个女孩可以选择一个没有跟他吵过架的男孩结婚。如果女孩X和女孩Y是朋友,且Y没有和男孩Z吵过架,女孩X同样可以选择男孩Z和自己结婚。另外,如果A和B是朋友,B和C是朋友,那么A和C也必定是朋友。每一轮中,每个女孩还可以额外选择K个自己原本不打算和她配对的男孩配对。一旦所有的女孩都找到了男友,那么他们就可以开始一轮新的游戏了,在每一轮新的游戏中,他们将使用相同的规则进行游戏,但是所有的女孩都不会选择之前选择过的男友了。问他们最多可以进行几轮游戏。跟HDU 3081基本一样,就是多了一个条件:每一轮中,每个女孩还可以额外选择K个自己原本不打算和她配对的男孩配对。这里的处理是把 阅读全文
posted @ 2013-10-27 17:39 浙西贫农 阅读(265) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 13 下一页