Advertisement
istinishat

Kuhn_maximum_matching

Nov 9th, 2017
197
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <vector>
  5.  
  6. using namespace std;
  7.  
  8. #define si(a) scanf("%d",&a)
  9. #define f first
  10. #define s second
  11. #define mp(a,b) make_pair(a,b)
  12. #define INF 2000000000
  13. #define MAX 1003
  14.  
  15. vector<int> graph[MAX];
  16. int vis[MAX],link[MAX];
  17.  
  18. bool dfs(int now)
  19. {
  20.     int i;
  21.     for(i=0;i<graph[now].size();i++){
  22.         int to=graph[now][i];
  23.         if(vis[to])
  24.             continue;
  25.         vis[to]=1;
  26.         if(link[to]==-1 || dfs(link[to])){
  27.             link[to]=now;
  28.             return true;
  29.         }
  30.     }
  31.     return false;
  32. }
  33.  
  34. int matching(int n)
  35. {
  36.     int i,ret=0;
  37.     memset(link,-1,sizeof(link));
  38.     for(i=0;i<n;i++){
  39.         memset(vis,0,sizeof(vis));
  40.         if(dfs(i))
  41.             ret++;
  42.     }
  43.     return ret;
  44. }
  45.  
  46. void reset()
  47. {
  48.     for(int i=0;i<MAX;i++)
  49.         graph[i].clear();
  50. }
  51.  
  52. int main()
  53. {
  54.     //freopen("input.txt","r",stdin);
  55.     int n,m,i,j,t;
  56.     si(t);
  57.     for(int cs=1;cs<=t;cs++){
  58.         si(n);si(m);
  59.         reset();
  60.         for(i=0;i<m;i++){
  61.             int u,v;
  62.             si(u);si(v);
  63.             u--;v--;
  64.             graph[u].push_back(v);
  65.         }
  66.         int ans=n-matching(n);
  67.         printf("Case %d: %d\n",cs,ans);
  68.     }
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement