栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

poj 1815 Friendship

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

poj 1815 Friendship

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=500,M=10000;const int inf=10000000;int head[N],nc;struct Edge{    int x,y,next,cap;} edge[M*4],sav[M*4];void add(int x,int y,int cap){    edge[nc].x=x;    edge[nc].y=y;    edge[nc].cap=cap;    edge[nc].next=head[x];    head[x]=nc++;    edge[nc].x=y;    edge[nc].y=x;    edge[nc].cap=0;    edge[nc].next=head[y];    head[y]=nc++;}int num[N],h[N],S,T,n,nn,m;int findpath(int x,int flow){    if(x==T)        return flow;    int res=flow,pos=n-1;    for(int i=head[x]; i!=-1; i=edge[i].next)    {        int y=edge[i].y;        if(h[x]==h[y]+1&&edge[i].cap>0)        { int tp=findpath(y,min(edge[i].cap,res)); res-=tp; edge[i].cap-=tp; edge[i^1].cap+=tp; if(!res||h[S]==n)     return flow-res;        }        if(edge[i].cap>0&&h[y]<pos) pos=h[y];    }    if(res==flow)    {        num[h[x]]--;        if(num[h[x]]==0)        { h[S]=n; return flow-res;        }        h[x]=pos+1;        num[h[x]]++;    }    return flow-res;}int Sap(){    memset(h,0,sizeof(h));    memset(num,0,sizeof(num));    int ans=0;    num[0]=n;    while(h[S]!=n)        ans+=findpath(S,inf);    return ans;}int g[205][205];void rdfs(int x){    for(int i=head[x];i!=-1;i=edge[i].next)    {        if((i&1)&&(edge[i].cap))        { edge[i].cap--; edge[i^1].cap++; rdfs(edge[i].y);        }    }}void dfs(int x){    for(int i=head[x];i!=-1;i=edge[i].next)    {        if((!(i&1)))        { if(edge[i].y==x+nn&&edge[i].cap==0) {     edge[i].cap++;     edge[i^1].cap--;     dfs(edge[i].y); } else if(edge[i].cap<inf) {     edge[i].cap++;     edge[i^1].cap--;     dfs(edge[i].y); }        }    }}int main(){    while(scanf("%d%d%d",&n,&S,&T)!=EOF)    {        bool flag=false;        for(int i=1;i<=n;i++)        { for(int j=1;j<=n;j++) {     scanf("%d",&g[i][j]);     if(g[i][j]&&i==S&&j==T)         flag=true; }        }        if(flag)        { printf("NO ANSWER!n"); continue;        }        memset(head,-1,sizeof(head));        nc=0;        for(int i=1;i<=n;i++)        { if(i!=S&&i!=T)     add(i,i+n,1); for(int j=1;j<=n;j++) {     if(g[i][j]&&i!=j)     {         if(i==S)  add(i,j,inf);         else if(i!=T)  add(i+n,j,inf);     } }        }        memcpy(sav,edge,sizeof(Edge)*nc);        nn=n;        n=n*2-2;        int ans=Sap();        printf("%dn",ans);        for(int i=1;i<=nn;i++)        { if(i!=S&&i!=T)     for(int j=head[i];j!=-1;j=edge[j].next)     {         if(edge[j].cap==0&&edge[j].y==i+nn)         {  sav[j].cap=sav[j^1].cap=0;  memcpy(edge,sav,sizeof(Edge)*nc);  if(Sap()!=ans-1)  {      sav[j].cap=1;      sav[j^1].cap=0;      continue;  }  if(flag)      printf(" ");  else      flag=true;  printf("%d",i);  ans--;  break;         }     }        }        printf("n");    }    return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372659.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号