luowa @ 2019-09-24 20:09:07
没弄反向边居然90,而且还是t的一个点
by luowa @ 2019-09-24 20:11:07
顺便……我t了,救救我
#include <bits/stdc++.h>
using namespace std;
int n,m,s,t;
int i,j,k;
int ans;
int a,b,c,d;
struct bian
{
int v;
int data;
int next;
};
bian w[100010],fan[100010];
int wnum;
int zz[10010],liu[10010],first[10010];
int bfs()
{
int now,ii,liunum=0,minn=1e9+7,zznum=0;
queue<int> q;
q.push(s);
for(ii=1;ii<=n;ii++) liu[ii]=0;
while(!q.empty())
{
now=q.front();
q.pop();
ii=first[now];
do
{
if(w[ii].data&&!liu[w[ii].v])
{
q.push(w[ii].v);
liu[w[ii].v]=now;
}
ii=w[ii].next;
}while(ii);
}
ii=t;
if(liu[ii]==0) return 0;
while(ii!=s)
{
int qqq=liu[ii];
qqq=first[qqq];
while(w[qqq].v!=ii)
qqq=w[qqq].next;
zz[++zznum]=qqq;
minn=min(minn,w[qqq].data);
ii=liu[ii];
}
ans+=minn;
for(ii=1;ii<=zznum;ii++)
{
w[zz[ii]].data-=minn;
zz[ii]=0;
}
return 1;
}
int main()
{
scanf("%d%d%d%d",&n,&m,&s,&t);
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
w[++wnum].data=c;
w[wnum].v=b;
w[wnum].next=first[a];
first[a]=wnum;
}
while(bfs());
printf("%d",ans);
return 0;
}
评测
by Null_Cat @ 2019-09-24 20:17:40
能卡掉就行。。。