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

poj 2125 Destroying The Graph

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

poj 2125 Destroying The Graph

#include<iostream>#include<cstdio>#include<algorithm> using namespace std;#define mm(a) memset((a),0,sizeof((a)))#define INF 0xFFFFFF#define MAXN 255int n,m,c[MAXN][MAXN],dis[MAXN],gap[MAXN];int st,ed;bool visited[MAXN];int stack[MAXN],top;int sap(int u,int flow){if(u==ed) return flow;int ans=0,i,t;for(i=0;i<=n+1;++i)if(c[u][i]&&dis[u]==dis[i]+1){t=sap(i,min(flow-ans,c[u][i]));c[u][i]-=t,c[i][u]+=t,ans+=t;if(ans==flow) return ans;}if(dis[st]>=n+2) return ans;if(!--gap[dis[u]]) dis[st]=n+2;++gap[++dis[u]];return ans;}void dfs(int p){if(visited[p]) return ;visited[p]=true;for(int i=0;i<n+1;i++)if(!visited[i] && c[p][i]) dfs(i);}void solve(){int x,y,ans=0,temp;mm(dis),mm(gap),mm(c),mm(visited);for(int i=1;i<=n;i++) scanf("%d",&c[n+i][n*2+1]);for(int i=1;i<=n;i++) scanf("%d",&c[0][i]);for(int i=1;i<=m;i++){scanf("%d%d",&x,&y);c[x][y+n]=INF;}n=n<<1;st=0,ed=n+1;for(gap[0]=n+2;dis[st]<n+2;) ans+=sap(st,INF);dfs(0);cout<<ans<<endl;top=0;n=n>>1;for(int i=1;i<=n;i++){if(!visited[i]) stack[top++]=i;if(visited[i+n]) stack[top++]=i+n;}cout<<top<<endl;while(top>0){temp=stack[--top];if(temp<=n) cout<<temp<<" -"<<endl;else cout<<temp-n<<" +"<<endl;}}int main(){while(scanf("%d%d",&n,&m)!=EOF)solve();return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/372296.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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