最大流问题,FF算法:
链式前向星建边,异或来求反向边。
const int N=2e3+86;
struct edge{int to,nxt,w;}e[N*2];int hd[N],tot=1;
void add(int u,int v,int w){
e[++tot]=(edge){v,hd[u],w}; hd[u]=tot;
}
int n,m,x;
bitset<286> vis;
int dfs(int p,int flow){
if(p==n)
return flow;
vis[p]=1;
for(int eg=hd[p];eg;eg=e[eg].nxt){
int to=e[eg].to,vol=e[eg].w,c;
if(vol&&!vis[to]&&((c=dfs(to,min(vol,flow)))!=-1)){
e[eg].w-=c;
e[eg^1].w+=c;
return c;
}
}
return -1;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>m>>x;
f(i,1,m){
int x,y,val;
cin>>x>>y>>val;
add(x,y,val);
add(y,x,0);
}
LL ans=0,c;
while((c=dfs(1,3e8))!=-1){
vis.reset();
//cout<<c<<"\n";
ans+=c;
}
if(ans){
cout<<ans<<" ";
cout<<(x/ans+(x%ans?1:0));}
else cout<<"Orz Ni Jinan Saint Cow!";
return 0;
}