社区讨论
Dinic80pts求条
P1345[USACO5.4] 奶牛的电信 Telecowmunication参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mkqnpbw7
- 此快照首次捕获于
- 2026/01/23 17:06 4 周前
- 此快照最后确认于
- 2026/01/23 22:32 4 周前
WA #5
CPP#include<bits/stdc++.h>
//#define int long long
using namespace std;
int n1,n2,n3,m1,m2;
int n,m,S,T,ans;
int head[10000010],to[10000010],nex[10000010],cnt;
int val[1000010],deep[1000010],cur[1000010];
inline void Add(int u,int v,int w){
to[cnt]=v;
val[cnt]=w;
nex[cnt]=head[u];
head[u]=cnt++;
}
queue<int> q;
inline bool bfs(){
memset(deep,0,sizeof deep);
while(q.size()) q.pop();
q.push(S);
deep[S]=1;
while(q.size()){
int u=q.front();
q.pop();
for(int i=head[u];i!=-1;i=nex[i]){
int v=to[i];
if(val[i]>0&&deep[v]==0){
deep[v]=deep[u]+1;
q.push(v);
}
}
}
return bool(deep[T]);
}
inline int dfs(int u,int f){
if(u==T) return f;
int use=0;
for(int &i=cur[u];i!=-1;i=nex[i]){
int v=to[i];
if(val[i]>0&&deep[v]==deep[u]+1){
int ff=dfs(v,min(f-use,val[i]));
if(ff>0){
val[i]-=ff;
val[i^1]+=ff;
use+=ff;
if(use==f) break;
}
}
}
if(use==0) deep[u]=0;
return use;
}
inline void Dinic(){
while(bfs()){
for(int i=0;i<=n;i++) cur[i]=head[i];
ans+=dfs(S,1e9);
}
}
signed main(){
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
memset(head,-1,sizeof(head));
cin>>n>>m>>S>>T;
for(int i=1;i<=m;i++){
int x,y,s=1;
cin>>x>>y;
Add(x,y,s);
Add(y,x,0);
Add(y,x,s);
Add(x,y,0);
}
Dinic();
cout<<ans;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...