摘要:
int Dfs(int k){ for(int i=0;i<v[k].size();i++){ int a=v[k][i]; if(used[a]==0){ used[a]=1; if(link[a]==-1||Dfs(link[a])){link[a]=k;return 1;} } }return 0;} 阅读全文
摘要:
题目大意:一城堡的所有的道路形成一个n个节点的树,如果在一个节点上放上一个士兵,那么和这个节点相连的边就会被看守住,问把所有边看守住最少需要放多少士兵。dproot[ i ]表示以i为根的子树,在i上放置一个士兵,看守住整个子树需要多少士兵。掌握了一个图论知识:图的最小点覆盖=二分图的最大匹配#include #include #include using namespace std;const int N=100000;int link[N],used[N];vector v[N];int Dfs(int k){ for(int i=0;i #include #include... 阅读全文