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;
}

0 0