洛谷1640 bzoj1854游戏 匈牙利就是又短又快

bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个“大牛分站”,就转回洛谷做题了

水题先行,一道傻逼匈牙利

其实本来的思路是搜索然后发现写出来类似于匈牙利(⊙o⊙)

(匈牙利的复杂度惊人,1e6秒过)

 1 #include <cstdio>
 2 bool b[3000001];
 3 int c[3000001],fir[3000001],to[3000001],nex[3000001];
 4 int N,n,p,q;
 5 void add(int p,int q)
 6 {
 7     nex[++N]=fir[p];to[N]=q;fir[p]=N;
 8 }
 9 bool find(int k)
10 {
11     b[k]=true;
12     for(int i=fir[k];i;i=nex[i])
13     if(!c[to[i]]) {    c[to[i]]=k;b[k]=false;return true;}
14     else 
15     if(!b[c[to[i]]] && find(c[to[i]]))
16     {
17         c[to[i]]=k;b[k]=false;return true;
18     }
19     b[k]=false;
20     return false;
21 }
22 int main()
23 {
24     scanf("%d",&n);
25     for(int i=1;i<=n;i++)
26     {
27         scanf("%d%d",&p,&q);
28         if(p<=n)    add(p,i+n);
29         if(q<=n)    add(q,i+n);
30     }
31     for(int i=1;i<=n;i++)
32         if(!find(i))
33         {
34             printf("%d",i-1);
35             return 0;
36         }
37     printf("%d",n);
38     return 0;
39 }

现在感觉洛谷的界面比bzoj不知道友好到哪里去了

posted @ 2016-10-05 08:43  汪立超  阅读(340)  评论(0编辑  收藏  举报