传送门

洛谷

Solution

比较巧妙啊!

考虑这个只有同意和不统一两种,所以直接令\(s\)表示选,\(t\)表示不选,然后在朋友直接建双向边就好了。

代码实现

#include<bits/stdc++.h>
using namespace std;
const int N=500010,Inf=1e9+10;
int front[N],cnt,s,t,n,m;
struct node
{
int to,nxt,w;
}e[1500010];
queue<int>Q;
int dep[N];
inline int gi()
{
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();}
return f*sum;
}
void Add(int u,int v,int w)
{
e[cnt]=(node){v,front[u],w};front[u]=cnt++;
e[cnt]=(node){u,front[v],0};front[v]=cnt++;
}
bool bfs()
{
memset(dep,0,sizeof(dep));
Q.push(s);dep[s]=1;
while(!Q.empty())
{
int u=Q.front();Q.pop();
for(int i=front[u];i!=-1;i=e[i].nxt)
{
int v=e[i].to;
if(!dep[v] && e[i].w)
{
dep[v]=dep[u]+1;Q.push(v);
}
}
}
return dep[t];
}
int dfs(int u,int flow)
{
if(u==t || !flow)return flow;
for(int i=front[u];i!=-1;i=e[i].nxt)
{
int v=e[i].to;
if(dep[v]==dep[u]+1 && e[i].w)
{
int di=dfs(v,min(flow,e[i].w));
if(di)
{
e[i].w-=di;e[i^1].w+=di;
return di;
}
else dep[v]=0;
}
}
return 0;
}
int dinic()
{
int flow=0;
while(bfs())
{
while(int d=dfs(s,Inf))flow+=d;
}
return flow;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("in.in","r",stdin);
#endif
memset(front,-1,sizeof(front));
n=gi();m=gi();t=n+1;
for(int i=1;i<=n;i++)
{
int x=gi();
if(x)Add(s,i,1);
else Add(i,t,1);
}
while(m--)
{
int u=gi(),v=gi();
Add(u,v,1);Add(v,u,1);
}
printf("%d\n",dinic());
return 0;
}

最新文章

  1. eclipse tomcat集成开发,修改server.xml
  2. nyoj 236拦截导弹 简单动归(java)
  3. JavaScript——特殊点总结
  4. PHP实现递归的三种方法
  5. 查找mysql数据库中所有包含特定名字的字段所在的表
  6. windows 运行banana
  7. [Nginx]单机环境的多应用配置
  8. 小技巧, 批处理修改IP
  9. jquery写tab切换,三行代码搞定
  10. vsftp在防火墙开启需要开放的端口
  11. 一个 JAR 文件可以用于
  12. Centos7安装最新版本的docker
  13. ActiveMQ安装及使用
  14. web.xml配置文件中async-supported报错解决
  15. instanceof -- JS
  16. crontab使用进程锁解决冲突
  17. ASP.NET动态创建数据库和表
  18. 18.阻止默认操作e.preventDefault();防止冒泡事件:e.stopPropagation()
  19. POJ1021 2D-Nim
  20. js创建弹框(提示框,待确认框)

热门文章

  1. Mybatis 多个参数传入的多种方法
  2. Linux与Windows的设备驱动模型对比
  3. YoloV3 训练崩溃
  4. multer使用
  5. OpenCl入门——实现简单卷积
  6. nodejs request module里的json参数的一个坑
  7. C#读取某一文件夹下的所有文件夹和文件
  8. Oracle中函数关键字简介
  9. 【异常】 Could not find Linker &#39;g++&#39; in system path.
  10. Django ORM常用的字段和参数