社区讨论

求助玄关

P1345[USACO5.4] 奶牛的电信 Telecowmunication参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mlw8wanj
此快照首次捕获于
2026/02/21 19:38
2 周前
此快照最后确认于
2026/02/24 09:40
2 周前
查看原帖
C
#include<bits/stdc++.h>
using namespace std;
const int N=6e5+1,M=3e3+1,INF=0x3f3f3f3f;
int n,m,s,t,u,v;
long long w,ans,dis[N];
int tot=1,vis[N],pre[N],head[N],flag[M][M];
struct node{
	int to,net;
	long long val;
}e[N];
void add(int u,int v,long long w){
	e[++tot].to=v;
	e[tot].val=w;
	e[tot].net=head[u];
	head[u]=tot;
	e[++tot].to=u;
	e[tot].val=0;
	e[tot].net=head[v];
	head[v]=tot;
}
int bfs(){
	for(int i=1;i<=n;++i)vis[i]=0;
	queue<int>q;
	q.push(s);
	vis[s]=1,dis[s]=INF;
	while(!q.empty()){
		int x=q.front();
		q.pop();
		for(int i=head[x];i;i=e[i].net){
			if(e[i].val==0)continue;
			int v=e[i].to;
			if(vis[v]==1)continue;
			dis[v]=min(dis[x],e[i].val);
			pre[v]=i;
			q.push(v);
			vis[v]=1;
			if(v==t)return 1;
		}
	}
	return 0;
}
void update(){
	int x=t;
	while(x!=s){
		int v=pre[x];
		e[v].val-=dis[t];
		e[v^1].val+=dis[t];
		x=e[v^1].to;
	}
	ans+=dis[t];
}
int main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>n>>m>>s>>t;
	for(int i=1;i<=m;++i){
		cin>>u>>v;
		u=u*2,v=v*2-1;
		add(u,v,INF);
		u-=1,v+=1;
		add(v,u,INF);
	}
	u=s*2-1,v=s*2;
	add(u,v,INF);
	u=t*2-1,v=t*2;
	add(u,v,INF);
	for(int i=1;i<=n;++i){
		if(i==s||i==t)continue;
		u=i*2-1,v=i*2;
		add(u,v,1);
	}
	s*=2,t=t*2-1;
	while(bfs()!=0){
		update();
	}
	cout<<ans<<endl;
	return 0;
}
只对了第六个点,求助玄关

回复

1 条回复,欢迎继续交流。

正在加载回复...