二分图题目泛做(为了对应陈学姐的课件)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分图题目泛做(为了对应陈学姐的课件)相关的知识,希望对你有一定的参考价值。

题1:BZOJ1854 SCOI2010游戏

每个属性x,y分别向i连条边,匹配到不能匹配为止。

输出即可。

技术分享
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <iostream>
 5 #include <algorithm>
 6 
 7 using namespace std;
 8 
 9 const int N = 1000000 + 5;
10 
11 int tim = 0, n, tot = 0;
12 int first[N], next[N<<1];
13 int u[N<<1], v[N<<1];
14 int used[N], girl[N];
15 
16 void Add(int s, int t){
17   ++ tot;
18   u[tot] = s; v[tot] = t;
19   next[tot] = first[u[tot]];
20   first[u[tot]] = tot;
21 }
22 
23 bool find(int now){
24   for(int i = first[now]; i; i = next[i]){
25     if(used[v[i]] != tim){
26       used[v[i]] = tim;
27 
28       if(girl[v[i]] == 0 || find(girl[v[i]])){
29         girl[v[i]] = now;
30         return true;
31       }
32     }
33   }
34 
35   return false;
36 }
37 
38 #define ONLINE_JUDGE
39 int main(){
40 #ifndef ONLINE_JUDGE
41   freopen("game.in", "r", stdin);
42   freopen("game.out", "w", stdout);
43 #endif
44   
45   int x, y;
46   
47   scanf("%d", &n);
48   for(int i = 1; i <= n; ++ i){
49     scanf("%d%d", &x, &y);
50     Add(x, i); Add(y, i);
51   }
52 
53   int ans = 0;
54   for(int i = 1; i <= 10000; ++ i){
55     ++ tim;
56     if(find(i))
57       ++ ans;
58     else break;
59   }
60 
61   printf("%d\n", ans);
62 
63 #ifndef ONLINE_JUDGE
64   fclose(stdin); fclose(stdout);
65 #endif
66   return 0;
67 }
BZOJ 1854

 

以上是关于二分图题目泛做(为了对应陈学姐的课件)的主要内容,如果未能解决你的问题,请参考以下文章

刷题总结——学姐的逛街计划(vijos1891费用流)

最大权闭合子图题目泛做

Vijos 学姐的逛街计划

Vijos1901 学姐的钱包

送给学姐的圣诞小礼物:用python做一个亮晶晶的消消乐小游戏

送给学姐的圣诞小礼物:用python做一个亮晶晶的消消乐小游戏