设为首页 加入收藏

TOP

poj 2822 & hdu 4280 <平面图网络流>(二)
2015-11-21 01:05:56 来源: 作者: 【 】 浏览:5
Tags:poj 2822 hdu 4280 < 平面图 网络 >
id build() {?
??? //③将所有的与之相连的边极角排序。?
??? for (int i = 1; i <= n; i++) {?
??????? sort(vertex[i].begin(), vertex[i].end());?
??????? int ms = vertex[i].size();?
??? //④遍历每条入边。将其后继设为与之顺时针相邻的出边。也就是在G’中连一条从这个入边的点到其后继的有向边。?
??????? for (int j = 0; j < ms - 1; j++)?
??????????? nxt[vertex[i][j].in] = vertex[i][j + 1].out;?
??????? nxt[vertex[i][ms - 1].in] = vertex[i][0].out;?
??? }?
??? int ms = m << 1 | 1;?
??? memset(belong, -1, sizeof(belong));?
??? cnt = 0;?
??? //⑤在G'中就是一些不相交的有向环。每个有向环就对应一个区域。找出了所有的区域,我们要的那张图就简单了。?
??? for (int i = 0; i <= ms; i++)?
??????? if (belong[i] == -1 && ++cnt > 0)?
??????????? find(i, i);?
??? //构不成平面的边,会形成一个特殊的区域,相当于进去死胡同再出来。但是答案不会受到影响,所以直接忽略。?
}?
double work() {?
??? int a, b;?
??? sp.init();?
??? //⑥根据对偶图构图,求得s-t之间最短路即是对应的最小割?
??? for (int i = 0; i < m; i++) {?
??????? a = belong[i << 1];?
??????? b = belong[i << 1 | 1];?
??????? sp.add(a, b, cap[i]);?
??????? sp.add(b, a, cap[i]);?
??? }?
??? a = belong[m << 1];?
??? b = belong[m << 1 | 1];?
??? return sp.solve(a, b);?
}?
int main() {?
??? int cas;?
??? scanf("%d", &cas);?
??? while (cas--) {?
??????? init();?
??????? build();?
??????? printf("%.0f\n", work());?
??? }?
??? return 0;?
}?


?

首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 4274 Spy's Work(12年长.. 下一篇HDU 4281 Judges' response(..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: