标签:vector ber sea ring fine problem find fir tip
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others)
Total Submission(s): 4383 Accepted Submission(s): 1602
不能以猫狗为顶点 那样找到的是哪些动物会转移 以小孩为顶点 找出最大点独立集 以小孩总数p为左右点集的顶点个数,假设小孩a喜欢的动物是小孩b不喜欢的动物 就连一条边edge(a,b)
记录猫和狗的
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <queue> #include <vector> #include <map> #define mem(a, b) memset(a, b, sizeof(a)) using namespace std; const int maxn = 10010, INF = 0x7fffffff; int line[600][600], used[maxn], girl[maxn]; int nx, ny, n, m, p, cnt; bool find(int x) { for(int j=1; j<=p; j++) { if(line[x][j] == 1 && used[j] == -1) { used[j] = 1; if(girl[j] == 0 || find(girl[j])) { girl[j] = x; return 1; } } } return 0; } int main() { while(cin>> n >> m >> p) { int ret = 0; mem(line, 0); char str1[550][5], str2[550][5]; for(int i=1; i<=p; i++) { cin>> str1[i] >> str2[i]; for(int j=1; j<i; j++) if(strcmp(str1[i],str2[j]) == 0 || strcmp(str1[j], str2[i]) == 0) line[i][j] = line[j][i] = 1; } mem(girl, 0); for(int i=1; i<=p; i++) { mem(used, -1); if(find(i)) ret++; } cout<< p-ret/2 <<endl; } return 0; }
Cat VS Dog HDU - 3829 (最大独立集 )
标签:vector ber sea ring fine problem find fir tip
原文地址:https://www.cnblogs.com/WTSRUVF/p/9314095.html