摘要: 这是一道综合的好题!题目大意:把n个人分成2各组,每一个人有他所认识的人。所分的组有四点要求:1、每个人都必需属于一个组。2、每个组至少有一个人。3、每个组里面的每个人必需互相认识。4、两个组的成员应尽量接近。首先分析这道题目,题目给出的是一个有向图,即如果有A认识B,但不一定有B认识A。但是在所分配的组里面,任意两个人都要互相认识。1、先读入数据建立有向图,然后对这个有向图进行处理,如果两个点之间的边是单向边,就认为两个点之间无边(因为这两个人不互相认识),对于两个点间的双向边,即建立一条无向边(这两个人互相认识),这样就可以把一个有向图转化为一个无向图。2、将这个无向图转化为它的反图。即有 阅读全文
posted @ 2012-08-28 23:16 proverbs 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 这个题,就不用说什么了吧,最裸的最小点覆盖。View Code 1 #include <cstdlib> 2 #include <cstdio> 3 #include <cstring> 4 #define M 1000000 5 using namespace std; 6 int head[M],next[M],to[M],linky[M],m,bk,n,cnt; 7 bool vis[M]; 8 inline void add(int u,int v) 9 {10 to[cnt]=v; next[cnt]=head[u]; head[u]=cnt++; 阅读全文
posted @ 2012-08-28 23:04 proverbs 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 此题:平面图最大流用的不是网络流算法,但是需要网络流的结论:最小割=最大流【问题描述】YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域。简单起见,可以将YT市看作一个正方形,每一个区域也可看作一个正方形。从而,YT城市中包括(n+1)×(n+1)个交叉路口和2n×(n+1)条双向道路(简称道路),每条双向道路连接主干道上两个相邻的交叉路口。下图为一张YT市的地图(n = 2),城市被划分为2×2个区域,包括3×3个交叉路口和12条双向道路。小Z作为该市的市长,他根据统计信息得到了每天上班高峰期间YT市每条道路两个方向的 阅读全文
posted @ 2012-08-28 15:36 proverbs 阅读(1650) 评论(0) 推荐(0) 编辑