ehhe
来源:互联网 发布:网站美工培训班 编辑:程序博客网 时间:2024/06/05 04:56
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<queue>
#include<math.h>
#include<algorithm>
#define ll __int64
#define inf 0x3f3f3f3f
using namespace std;
int n,a,b,c,cnt,head[200000],l[200000];
struct node
{
int to,next,r,w;
}q[200000];
void add(int a,int b,int c)
{
q[cnt].to=b;
q[cnt].next=head[a];
q[cnt].w=c;
head[a]=cnt++;
q[cnt].to=a;
q[cnt].next=head[b];
q[cnt].r=0;
head[b]=cnt++;
}
int bfs()
{
int a;
memset(l,-1,sizeof(l));
l[1]=0;
queue<int>Q;
while(!Q.empty())
Q.pop();
Q.push(1);
while(!Q.empty())
{
int v=Q.front();
Q.pop();
for(int i=head[v];~i;i=q[i].next)
{
if(q[i].w&&l[q[i].to ]==-1)
{
l[q[i].to ]=l[v]+1;
Q.push(q[i].to);
}
}
}
if(l[n]>0)
return 1;
else return 0;
}
int dfs(int x,int f)
{
int a;
if(x==n)
return f;
for(int i=head[x];~i;i=q[i].next)
{
if(q[i].w&&(l[q[i].to]==l[x]+1)&&(a=dfs(q[i].to,min(q[i].w,f)) ) )
{
q[i].w-=a;
q[q[i].r ].w+=a;
return a;
}
}
l[x]=-1;
return 0;
}
int main()
{
int m,i,j,k;
int cla;
scanf("%d",&cla);
for(int gr=1;gr<=cla;gr++)
{
cnt=1;
memset(head,-1,sizeof(head));
int a,b,c;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
int ans=0;
while(bfs())
{
while(k=dfs(1,inf))
{
ans+=k;
}
}
printf("Case %d: %d\n",gr,ans);
}
return 0;
}
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<queue>
#include<math.h>
#include<algorithm>
#define ll __int64
#define inf 0x3f3f3f3f
using namespace std;
int n,cnt,s,t,head[200000],l[200000];
struct node
{
int to,next,r,w;
}q[200000];
void add(int v,int u,int w)
{
q[cnt].to=u;
q[cnt].next=head[v];
q[cnt].w=w;
head[v]=cnt++;
q[cnt].to=v;
q[cnt].next=head[u];
q[cnt].r=0;
head[u]=cnt++;
}
int bfs()
{
memset(l,-1,sizeof(l));
l[0]=0;
queue<int>Q;
while(!Q.empty())
Q.pop();
Q.push(1);
while(!Q.empty())
{
int v=Q.front();
Q.pop();
for(int i=head[v];~i;i=q[i].next)
{
if(q[i].w&&(l[q[i].to ]==-1))
{
l[q[i].to ]=l[v]+1;
Q.push(q[i].ro);
}
}
}
if(l[n]>0) return 1;
else return 0;
}
int dfs(int x,int f)
{
int a;
}
int main()
{
int m,i,j,k;
while(~scanf("%d%d",&n,&m))
{
int a,c,b;
cnt=1;memset(head,-1,sizeof(head));
int tmp=n;
s=0,t=n+1;
for(i=1;i<=n;i++)
{
scanf("%d%d",&a,&b);
add(s,i,a);
add(i,t,b);
}
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
add(a,b,c);
}
int ans=0;
while(bfs())
{
ans+=dfs(0,inf);
}
printf("%d\n",ans);
}
return 0;
}
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <queue>
#include <cmath>
#define inf 0x3f3f3f3f;
using namespace std;
int a[100000],n;
int main()
{
int i,j,s,t,k;
while(~scanf("%d%d%d",&n,&s,&t))
{
if(s==t&&n==1)
{
printf("0\n");
}
else if(s==t&&n!=1)
{
printf("1\n");
}
else if(t==n&&s==1)
{
printf("0\n");continue;
}
else if((t==n||t==1)&&s!=1)
{
printf("2\n");
}
}
return 0;
}