# [洛谷P2057][bzoj1934]善意的投票（最大流）

## 输入输出样例

3 3
1 0 0
1 2
1 3
3 2

1

## 说明

2≤n≤300，1≤m≤n(n-1)/2。

 1 // It is made by XZZ
2 #include<cstdio>
3 #include<algorithm>
4 #include<queue>
5 #include<cstring>
6 using namespace std;
7 #define rep(a,b,c) for(int a=b;a<=c;a++)
8 #define drep(a,b,c) for(int a=b;a>=c;a--)
9 #define erep(a,b) for(rg int a=fir[b];a;a=nxt[a])
10 #define il inline
11 #define rg register
12 #define vd void
13 #define t (dis[i])
14 typedef long long ll;
15 il int gi(){
16     rg int x=0;rg char ch=getchar();
17     while(ch<'0'||ch>'9')ch=getchar();
18     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
19     return x;
20 }
21 const int maxn=333,maxm=333*333,S=310,T=311;
22 int fir[maxn],nxt[maxm],dis[maxm],w[maxm],id=1;
23 il vd add(int a,int b,int c){
24     nxt[++id]=fir[a],fir[a]=id,dis[id]=b,w[id]=c;
26 }
27 int dep[maxn];
28 inline bool BFS() {
29     int que[maxn],hd=0,tl=1;
30     memset(dep,0,sizeof dep);
31     que[hd]=S;
32     bool yes[maxn]= {0};
33     yes[S]=1,dep[S]=0;
34     while(tl-hd) {
35     int now=que[hd];
36     for(int i=fir[now]; i; i=nxt[i])
37         if(w[i]>0&&!yes[t])
38         yes[t]=1,que[tl++]=t,dep[t]=dep[now]+1;
39     ++hd;
40     }
41     return yes[T];
42 }
43 inline int Dinic(int now,int h) {
44     if(now==T)return h;
45     int ans=0;
46     for(int i=fir[now]; i; i=nxt[i])
47     if(w[i]>0&&dep[t]==dep[now]+1) {
48         int D=Dinic(t,min(h,w[i]));
49         w[i]-=D,w[i^1]+=D,ans+=D,h-=D;
50         if(h==0)return ans;
51     }
52     return ans;
53 }
54 bool k[maxn];
55 int main(){
56     int n=gi(),m=gi();
57     rep(i,1,n){
58     k[i]=gi();
61     }
62     rep(i,1,m){
63         int a=gi(),b=gi();
64     if(k[a]^k[b]){
73 }