hdu 1054 Strategic Game 最小点覆盖

来源:互联网 发布:太极越狱mac 编辑:程序博客网 时间:2024/05/17 05:03

建双向边,然后最大匹配/2。另外邻接矩阵会T..

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int N = 1505;struct node{int to, nxt;}e[N*N];int head[N];int cnt;int n;int link[N], vis[N];void add( int u, int v ){e[cnt].to = v;e[cnt].nxt = head[u];head[u] = cnt++;e[cnt].to = u;e[cnt].nxt = head[v];head[v] = cnt++;}int dfs( int u ){for( int i = head[u]; ~i; i = e[i].nxt ){int to = e[i].to;if( !vis[to] ){vis[to] = 1;if( link[to] == -1 || dfs(link[to]) ){link[to] = u;return 1;}}}return 0;}int main(){while(~scanf("%d", &n)){int src, m;cnt = 0;memset(head, -1, sizeof(head));for( int i = 1; i <= n; i++ ){int to;scanf("%d:(%d)", &src, &m);src++;while(m--){scanf("%d", &to);to++;add(src, to);}}int ans = 0;memset(link, -1, sizeof(link));for( int i = 1; i <= n; i++){memset(vis, 0, sizeof(vis));ans += dfs(i);}printf("%d\n", ans/2);}return 0;}


0 0
原创粉丝点击