摘要: 题目大意:在一个城镇,有m个路口,和n条路,这些路都是单向的,而且路不会形成环,现在要弄一些伞兵去巡查这个城镇,伞兵只能沿着路的方向走,问最少需要多少伞兵才能把所有的路口搜一遍。题解:这道题是有向无环图的最小路径覆盖问题,即求二分图最大匹配。首先建图,然后匹配,最后未被匹配到的点数就是答案,画画图很容易得到这个结论。#include #include #include using namespace std;const int N=505;int link[N],used[N];vector v[N];bool Dfs(int k){ for(int i=0;i<v[k].size(); 阅读全文
posted @ 2014-03-26 14:55 forever97 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 题目大意:有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。题解:由于只要一台机器调到某模式就可以完成一个任务那么直接相当于在平面内选取几个点可以使全部的边被覆盖,所以就是二分图的最小点覆盖。#include #include #include using namespace std;const int 阅读全文
posted @ 2014-03-26 14:28 forever97 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 题目大意:n个同学,一些男女同学会有缘分成为情侣,格式ni:(m)n1n2n3表示同学ni有缘与n1,n2,n3成为情侣,求集合中不存在有缘成为情侣的同学的最大同学数。题解:图论知识:二分图最大独立集=总点数-二分图最大匹配,但是不知道同学的性别,所以将一个人同时看做女生和男生,就形成了二分图~#include #include #include using namespace std;const int N=505;int link[N],used[N];vector v[N];bool Dfs(int k){ for(int i=0;i<v[k].size();i++){ ... 阅读全文
posted @ 2014-03-26 13:45 forever97 阅读(150) 评论(0) 推荐(0) 编辑