zoukankan      html  css  js  c++  java
  • POJ 2239 简单的二分图求最大匹配

    题意:

    给出n个可选课程..

    给出第 i 个课程分布所在的课程表个数 t 和位置 (p, q)..

    P.S. :一个星期有7天..一天有12道题.. 然后看成一条线..

    思路:

    把 课程 和 分配时间 作为两个集合..

    然后看作求二分图的最大匹配..

    Tips:

    分配时间转变成 p*12+q

    Code:

    View Code
     1 #include <stdio.h>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 #define clr(x) memset(x, 0, sizeof(x))
     6 
     7 struct Edge
     8 {
     9     int to;
    10     int next;
    11 }edge[10000000];
    12 int tot;
    13 int head[310];
    14 
    15 void add(int s, int u)
    16 {
    17     edge[tot].to = u;
    18     edge[tot].next = head[s];
    19     head[s] = tot++;
    20 }
    21 
    22 int link[310];
    23 int vis[110];
    24 int m, n;
    25 
    26 int dfs(int x)
    27 {
    28     for(int i = head[x]; i != 0; i = edge[i].next){
    29         int y = edge[i].to;
    30         if(!vis[y]){
    31             vis[y] = true;
    32             if(link[y] == 0 || dfs(link[y])){
    33                 link[y] = x;
    34                 return true;
    35             }
    36         }
    37     }
    38     return false;
    39 }
    40 
    41 void solve()
    42 {
    43     for(int i = 1; i <= n; ++i){
    44         clr(vis);
    45         if(dfs(i))
    46             m++;
    47     }
    48 }
    49 
    50 int main()
    51 {
    52     int i, j, k;
    53     int t, p, q;
    54     int sum;
    55     while(scanf("%d", &n) != EOF)
    56     {
    57         tot = 1;
    58         m = 0;
    59         clr(head);
    60         clr(link);
    61 
    62         for(i = 1; i <= n; ++i){
    63             scanf("%d", &t);
    64             while(t--){
    65                 scanf("%d %d", &p, &q);
    66                 add(i, p*12+q);
    67             }
    68         }
    69 
    70         solve();
    71 
    72         printf("%d\n", m);
    73 
    74 
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    unigui+fastreport报表打印
    MySQL索引类型总结和使用技巧以及注意事项
    Vue.js 和 MVVM
    Go -- 中结构体与字节数组能相互转化
    iOS算法合集
    postman中 form-data、x-www-form-urlencoded、raw、binary的区别
    JS注入
    JS页面间传值
    上手ReactiveCocoa之基础篇
    数据结构与算法题整理
  • 原文地址:https://www.cnblogs.com/Griselda/p/2671688.html
Copyright © 2011-2022 走看看