[codevs 1232] 飞行员配对方案问题

[codevs 1232] 飞行员配对方案问题


题解:

做法一:二分图最大匹配。
做法二:用网络流求解二分图最大匹配...

但是都卡在输出路径上面。。。纠结要不要直接交数据,反正我有。。。

代码(未AC):

#include<cstdio>
#include<cstring>
using namespace std;

const int maxn = 100 + 10;

int x[maxn], y[maxn], m, n;
bool vis[maxn], g[maxn][maxn];


int dfs(int u) {
    for(int v = n; v >= 1; v--)
      if(g[u][v] && !vis[v]) {
        vis[v] = true;
        if(y[v] == -1 || dfs(y[v])) {
          x[u] = v;
          y[v] = u;
          return 1;
        }
      }
    return 0;
}

int main() {
    int u, v, ans = 0;
    scanf("%d%d", &m, &n);
    while(scanf("%d%d",&u,&v), u != -1 && v != -1)
      g[u][v] = g[v][u] = true;
    memset(x, -1, sizeof(x));
    memset(y, -1, sizeof(y));
    for(int i = 1; i <= m; i++) {
        memset(vis, 0, sizeof(vis));
        ans += dfs(i);
    }
    if(ans) {
      printf("%d\n", ans);
      for(int i = 1; i <= m; i++) if(x[i] > 0) printf("%d %d\n", i, x[i]);
    }
    else printf("No Solution!");
}


posted @ 2015-02-01 16:14  wfwbz  阅读(172)  评论(0编辑  收藏  举报