标签:
题目:找出相互不恋爱的人。
吐槽:500个点用邻接矩阵4000多ms,用了邻接表1000ms不到,所以大约500个点的时候就要考虑邻接表了。
/************************************************ Author :DarkTong Created Time :2016/7/31 20:12:30 File Name :Poj_1466.cpp *************************************************/ //#include <bits/stdc++.h> #include <cstring> #include <cstdio> #include <vector> using namespace std; const int maxn = 500 + 10; vector<int> w[maxn]; int n, m; int Left[maxn]; bool used[maxn]; bool match(int j) { for(int i=0;i<w[j].size();++i) if(!used[w[j][i]]) { int v = w[j][i]; used[v] = true; if(Left[v]==-1||match(Left[v])) { Left[v] = j; return true; } } return false; } //返回最大匹配数 int hungary() { int res=0; memset(Left, -1, sizeof(Left)); for(int i=0;i<m;++i) { memset(used, 0, sizeof(used)); if(match(i)) res++; } return res; } int main() { int T, cas=1; while(scanf("%d", &n)==1) { memset(w, 0, sizeof(w)); m=n; for(int i=0;i<n;++i) { int u, t, v; scanf("%d: (%d)", &u, &t); for(int j=0;j<t;++j) { scanf("%d", &v); w[u].push_back(v); } } printf("%d\n", (2*n-hungary())>>1); } return 0; }
Poj_1466 Girls and Boys -最大独立集
标签:
原文地址:http://www.cnblogs.com/DarkTong/p/5724662.html