poj 2135 Farm Tour
来源:互联网 发布:二级计算机c语言 编辑:程序博客网 时间:2024/05/16 06:48
类型:最小费用最大流【经典】
题目:已知有n个点,m条有各自长度的路。fj要带他的朋友从1点走到n点,再从n点返回1点,要求不走重复的点。求往返所走路径长度的最小值是多少
思路:本题相当于求从源点到终点的两条路径,边各不相同,路径长度最小
设每个边的容量为1,构造一个容量网络,则本题即是求从源点到终点流量为2的最少花费【即路径长度】,构造超级源点,指向源点,容量为2,费用为0,方便计算
!!!对于无向图,每条边相当于两条独立的有向边
// poj 2135 Farm Tour// 868K16MS#include <cstdio>#include <cstring>#include <iostream>#include <queue>#include <algorithm>using namespace std;#define CLR(a, b) memset(a, b, sizeof(a))const int INF = 0x7f7f7f7f;const int MAXN = 1010;const int MAXM = 40100;struct { int v, cap, cost, nxt;}edge[MAXM];int n, m, ans, k;int pre[MAXN], dis[MAXN], head[MAXN];bool vis[MAXN];void addedge(int u,int v,int ca,int co) { edge[k].v = v; edge[k].cap = ca; edge[k].cost = co; edge[k].nxt = head[u]; head[u] = k++; edge[k].v = u; edge[k].cap = 0; edge[k].cost = -co; edge[k].nxt = head[v]; head[v] = k++;}bool spfa() { int i; fill(dis, dis + n + 1, INF); CLR(vis, false); dis[0]=0; queue<int> q; q.push(0); vis[0]=true; while(!q.empty()) { int u = q.front(); q.pop(); vis[u] = false; for(i = head[u]; i; i = edge[i].nxt){ int v = edge[i].v; if(edge[i].cap > 0 && dis[v] > dis[u] + edge[i].cost) { dis[v] = dis[u] + edge[i].cost; pre[v] = i; if(!vis[v]){ vis[v] = true; q.push(v); } } } } if(dis[n] == INF) return false; return true;}void end(){ int u, p; for(u = n; u; u = edge[p ^ 1].v){ p = pre[u]; edge[p].cap -= 1; edge[p ^ 1].cap += 1; ans += edge[p].cost; }}int main(){ int a, b, c; k = 2; CLR(head, 0); CLR(vis, false); scanf("%d %d", &n, &m); addedge(0, 1, 2, 0); while(m--) { scanf("%d %d %d",&a, &b, &c); addedge(a, b, 1, c); // !!! addedge(b, a, 1, c); } ans = 0; while(spfa()) { end(); } cout<<ans<<endl; return 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
- 关于结构体指针问题
- 【maven】重新安装maven、nexus
- 解决backtrack5无法ssh登录问题
- 传说是阿里巴巴的一份Android面试题
- Android应用UI设计和用户体验的10个要点
- poj 2135 Farm Tour
- Java虚拟机(JVM)中的内存设置详解
- Android 开发
- Maven Nexus配置
- Android控件动态使用
- 第三周上机任务--任务3--学会定义和使用类和对象--并按要求增加类的功能
- 存储过程和函数的区别
- Activity UI显示的学习总结
- 图片等比例缩放