AcWing上过了,这里一直莫名WA,请好心人帮忙看看哪写挂了!!谢谢!!
#include<bits/stdc++.h>
#define fr(a) freopen(a,"r",stdin)
#define fw(a) freopen(a,"w",stdout)
using namespace std;
typedef long long ll;
const int N=210,M=2e4+10,INF=0x3f3f3f3f;
struct node{
ll v,w,nxt;
}edge[M],ZERO;
ll n,m,head[N],tot,s,t,res,u[N],v[N];
ll d[N],now[N];
void add(ll u,ll v,ll w){
edge[++tot]=(node){v,w,head[u]};
head[u]=tot;
}
void Init(){
memset(head,0,sizeof head);
res=INF;tot=1;
}
bool bfs(){
memset(d,0,sizeof d);
queue <ll> q;
q.push(s+n);d[s+n]=1;now[s+n]=head[s+n];
while(q.size()){
ll x=q.front();q.pop();
for(int i=head[x];i;i=edge[i].nxt){
ll vv=edge[i].v,ww=edge[i].w;
if(ww && !d[vv]){
q.push(vv);d[vv]=d[x]+1;
now[vv]=head[vv];
if(vv==t) return true;
}
}
}return false;
}
ll dinic(ll x,ll flow){
if(x==t) return flow;
ll rest=flow,k;
for(int i=now[x];i&&rest;i=edge[i].nxt){
ll vv=edge[i].v,ww=edge[i].w;
if(ww && d[vv]==d[x]+1){
k=dinic(vv,min(rest,ww));
if(!k) d[vv]=0;
edge[i].w-=k,edge[i^1].w+=k;
rest-=k;
}now[x]=i;
}return flow-rest;
}
int main(){
while(cin>>n>>m){
Init();
for(int i=1;i<=m;i++){
char c;cin>>c;
scanf("%lld,%lld",&u[i],&v[i]);cin>>c;
u[i]++,v[i]++;
}
for(s=1;s<=n;s++){
for(t=s+1;t<=n;t++){
for(int i=1;i<=tot;i++) edge[i]=ZERO;
memset(head,0,sizeof head);
tot=1;
for(int i=1;i<=n;i++){
if(i!=s&&i!=t) add(i,i+n,1),add(i+n,i,0);
}
for(int i=1;i<=m;i++){
add(u[i]+n,v[i],INF),add(v[i],u[i]+n,0);
add(v[i]+n,u[i],INF),add(u[i],v[i]+n,0);
}
ll ans=0,flag;
while(bfs()){
while(flag=dinic(s+n,INF)) ans+=flag;
}
res=min(res,ans);
}
}
if(n<=1) res=n;
cout<<min(res,n)<<endl;
}
return 0;
}