标签:sam dfs 操作 clu each cat min 单词 wan
Input
Output
Sample Input
3 4 1 1 1 3 2 2 3 2
Sample Output
2
题意:有一个n*n的矩阵,输入k行数,每行数是一个点的坐标,一次性可以去掉矩阵一行或者一列的~~那个单词没查,反正就是去掉这些坐标点,问你最少的操作次数
思路:就是一个最小顶点覆盖的模板题,和杭电的2119一样。
#include<stdio.h> #include<string.h> #define N 550 int n,k; int book[N],e[N][N],match[N]; int dfs(int u) { int i; for(i = 1; i <= n; i ++) { if(!book[i]&&e[u][i]) { book[i] = 1; if(!match[i]||dfs(match[i])) { match[i] = u; return 1; } } } return 0; } int main() { int t1,t2,sum,i,j; while(scanf("%d%d",&n,&k)!=EOF) { sum = 0; memset(e,0,sizeof(e)); memset(match,0,sizeof(match)); for(i = 1; i <= k; i ++) { scanf("%d%d",&t1,&t2); e[t1][t2] = 1; } for(i = 1; i <= n; i ++) { memset(book,0,sizeof(book)); if(dfs(i)) sum ++; } printf("%d\n",sum); } return 0; }
【二分匹配入门专题1】G - Asteroids poj3041【最小顶点覆盖】
标签:sam dfs 操作 clu each cat min 单词 wan
原文地址:http://www.cnblogs.com/chengdongni/p/7353212.html