摘要: 题目链接:http://poj.org/problem?id=3275思路:对于n个节点,共有n*(n-1)/2对关系,对于给出的m对已经确定的关系,我们可以用传递闭包推出目前已经确定的关系对数ans,于是答案就是n*(n-1)/2-ans. 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 1010 8 9 vector >G_from;10 vector >G_to;11 bool map[MAXN][MAXN];12 13 int main( 阅读全文
posted @ 2013-08-24 21:35 ihge2k 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3204思路:显然只有增大那最小割边集上的边才能增加最大流,因此,我们可以先跑一遍最大流,然后对于那些满足条件的边u->v,当且仅当从源点开始沿着正向边能遍历到u,从汇点开始沿着正向边能遍历到v. 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 555 8 #define MAXM 55555 9 #define inf 1que; 39 que.push(vt); 40... 阅读全文
posted @ 2013-08-24 20:25 ihge2k 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=3164思路:朱刘算法,模版题。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 111 8 #define inf 1v; 36 if(u==root)//记录是root从哪一条边到有效点的(这个点就是实际的起点) 37 ansi=i; 38 In[v]=edge[i].w; ... 阅读全文
posted @ 2013-08-24 16:53 ihge2k 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2987思路:标准的最大权闭合图,构图:从源点s向每个正收益点连边,容量为收益;从每个负收益点向汇点t连边,容量为收益的相反数;对于i是j的上司,连边i->j,容量为inf。最大收益 = 正收益点权和 - 最小割 = 正收益点权和 - 最大流(胡波涛论文上有证明)。这题的关键是如何在最小割的前提下求出最少的割边数目,可以从源点对残量网络进行一次DFS,每个割都会将源汇隔开,所以从源点DFS下去一定会因为碰到某个割而无法前进,用反证法易知这时遍历过的点数就是S集的最少点数。 1 #include 2 #include 3 #in 阅读全文
posted @ 2013-08-24 16:15 ihge2k 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://poj.org/problem?id=2455思路:求1-n的路径中最长段的最小值,显然要用到二分,我们二分最长段,如果当前u,v的距离小于等于limit,则连边(双向边),边容量为1,代表只能走1次。然后就是以1为源点,n为汇点跑最大流,如果maxflow>=T,则在(low,mid)中搜索,否则就在(mid,high)中搜索。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 444 8 #define MAXM 4... 阅读全文
posted @ 2013-08-24 12:23 ihge2k 阅读(202) 评论(0) 推荐(0) 编辑