90分求助 WA #10
查看原帖
90分求助 WA #10
237806
wcyares楼主2021/3/15 17:16

rt,标准输出1003,而我的是1016……

#include <bits/stdc++.h>
using namespace std;
const int N=10000,M=233300;
int m,src=1,des=26,top=1,head[N],dep[N];
const int inf=0x3f3f3f3f;
struct ss{int next,to,dis;}f[M];
inline int add(int from,int to,int dis){
	f[++top].to=to;
	f[top].dis=dis;
	f[top].next=head[from];
	head[from]=top;
}
inline bool bfs(){
	queue <int >q;
	memset(dep,0,sizeof(dep));
	dep[src]=1;q.push(src);
	while(!q.empty()){
		int u=q.front();q.pop();
		for(int i=head[u];i;i=f[i].next){
			int v=f[i].to;
			if(f[i].dis&&!dep[v]){
				dep[v]=dep[u]+1;
				q.push(v);
				if(v==des)return 1;
			}
		}
	}
	return 0;
}
inline int dfs(int u,int in){
	if(u==des) return in;
	int out=0;
	for(int i=head[u];i;i=f[i].next){
		int v=f[i].to;
		if(f[i].dis&&dep[v]==dep[u]+1){
			int res=dfs(v,min(f[i].dis,in));
			f[i].dis-=res;
			f[i^1].dis+=res;
			out+=res;
			if(out==in) return in;
		}
	}
	if(out==0) dep[u]=0;
	return out;
}
int main (){
	//printf("%d %d\n",'A','Z');
	scanf("%d",&m);
	int aa,bb,c;char a,b;
	for(int i=1;i<=m;i++){
		cin>>a>>b>>c;
		if(a>='a'&&a<='z') aa=a-'a'+27;else if(a>='A'&&a<='Z') aa=a-'A'+1;
		if(b>='a'&&b<='z')bb=b-'a'+27;else if(b>='A'&&b<='Z') bb=b-'A'+1;
		//cout<<aa<<" "<<bb<<endl;
		add(aa,bb,c);add(bb,aa,0);
	}int ans=0;
	while(bfs()){ans+=dfs(src,inf);}
	cout<<ans<<endl;
	return 0;
}
2021/3/15 17:16
加载中...