poj 2135 Farm Tour
来源:互联网 发布:排课系统算法 编辑:程序博客网 时间:2024/05/01 16:38
从1到n再从n到1可以看成从1到n走两遍。关键就在这,否则需要把每个点拆成两个点,1000的数据必然超时,所以这样就能很好的解决。
另外因为是无向图,所以需要建立正反向两条边,不必担心会同时走两条边,因为是最小费用所以正反两条边里必有一条满足条件的边,而另外一条边走到某点再走回来在走其他的边必然不如直接走其他的边,所以这样建图正确。
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#include<vector>#include<queue>#include<queue>#define inf 0x3f#define maxn 1005#define rep(a,b,i) for(i=a;i<=b;i++)using namespace std;struct pi{ int to; int cap; int cost; int rev;};vector<pi>g[maxn];int dis[maxn];int pre[maxn],pree[maxn];int sink,source;int vis[maxn];int a[maxn];void add(int a,int b,int cap,int cost){ pi pp; pp.to=b; pp.cap=cap; pp.cost=cost; pp.rev=(int)g[b].size(); g[a].push_back(pp); pp.to=a; pp.cap=0; pp.cost=-cost; pp.rev=(int)g[a].size()-1; g[b].push_back(pp); return ;}int spfa(void){ int i,p,k; memset(dis,0x3f ,sizeof(dis)); memset(vis,0,sizeof(vis)); memset(pre,-1,sizeof(pre)); memset(pree,-1,sizeof(pree)); dis[source]=0; vis[source]=1; queue<int>q; pi pp; q.push(source); while(!q.empty()) { p=q.front(); k=(int)g[p].size(); q.pop(); vis[p]=0; if(p==sink) continue; for(i=0;i<k;i++) { pp=g[p][i]; if(pp.cap>0&&dis[pp.to]>dis[p]+pp.cost) { dis[pp.to]=dis[p]+pp.cost; pre[pp.to]=p; pree[pp.to]=i; if(!vis[pp.to]) { q.push(pp.to); vis[pp.to]=1; } } } } return pre[sink]!=-1;}int min(int a,int b){ int p; p=a; if(b<a) p=b; return p;}int minflow(void){ int i,f; int res=0; while(spfa()) { f=inf; for(i=sink;i!=source;i=pre[i]) { f=min(f,g[pre[i]][pree[i]].cap); } res+=f*dis[sink]; for(i=sink;i!=source;i=pre[i]) { pi &e=g[pre[i]][pree[i]]; e.cap-=f; g[i][e.rev].cap+=f; } } return res;}int main(){ int i,j,n,m,p,t,k; while(cin>>n>>m){ rep(0,n+1,i) g[i].clear(); rep(1,m,i){ scanf("%d%d%d",&p,&k,&t); add(p,k,1,t); add(k,p,1,t); } add(0,1,2,0); add(n,n+1,2,0); source=0; sink=n+1; printf("%d\n",minflow()); }}
0 0
- POJ 2135 Farm Tour
- poj 2135 Farm Tour
- poj 2135 Farm Tour
- poj 2135 Farm Tour
- poj 2135 Farm Tour
- POJ 2135-Farm Tour
- POJ 2135 Farm Tour
- POJ-2135-Farm Tour
- POJ 2135 Farm tour
- POJ 2135 Farm Tour
- POJ 2135 Farm Tour
- poj 2135 Farm Tour
- poj 2135 Farm Tour
- POJ 2135 Farm Tour
- POJ 2135 Farm Tour
- poj 2135 Farm Tour
- POJ 2135 Farm Tour
- POJ - 2135 Farm Tour
- MyPoint类
- 活动安排_贪心算法
- 位运算(二进制位编号顺序)
- 矩阵相乘
- Linux生成动态链接库的-fPIC参数问题
- poj 2135 Farm Tour
- Double
- mysql存储过程
- webpy+uploadify实现文件异步上传
- 归并排序
- QFE23xx揭秘:最强大的Qualcomm RF360前端芯片——更多频带,更多模式,更小的PCB尺寸
- spss Clementine12 破解方法
- POJ 2186 Popular Cows -- tarjan 缩点
- 使用jquery.upload.js实现异步上传