题意:

      题意是一个人他要从牧场1走到牧场n然后在走回来,每条路径只走一次,问全程的最短路径是多少。

思路:

       这个题目挺简单的吧,首先要保证每条边只能走一次,然后还要要求费用最小,那么我们可以直接跑费用流啊!还有题目说的是去了又回来,这个地方我们可以直接一次跑出两条路径,就是起始的时候的流量是2就行了,然后一遍费用流,然后就wa了,这个题目最坑人的地方就是他的输入叙述,说的什么The starting field, the end field, and the path's length,这个我没猜错应该是说的有向边的意思吧,然后就是wa,改成无向边就行了。别的没啥。


#include<stdio.h>
#include<string.h>
#include<queue> #define N_node 1000 + 10
#define N_edge 50000 + 200
#define INF 1000000000 using namespace std; typedef struct
{
int from ,to ,next ,cost ,flow;
}STAR; STAR E[N_edge];
int list[N_node] ,tot;
int s_x[N_node] ,mer[N_edge]; void add(int a ,int b ,int c ,int d)
{
E[++tot].from = a;
E[tot].to = b;
E[tot].cost = c;
E[tot].flow = d;
E[tot].next = list[a];
list[a] = tot; E[++tot].from = b;
E[tot].to = a;
E[tot].cost = -c;
E[tot].flow = 0;
E[tot].next = list[b];
list[b] = tot;
} bool spfa(int s ,int t ,int n)
{
for(int i = 0 ;i <= n ;i ++)
s_x[i] = INF;
int mark[N_node] = {0};
s_x[s] = 0 ,mark[s] = 1;
queue<int>q;
q.push(s);
memset(mer ,255 ,sizeof(mer));
while(!q.empty())
{
int xin ,tou = q.front();
q.pop();
mark[tou] = 0;
for(int k = list[tou] ;k; k = E[k].next)
{
xin = E[k].to;
if(s_x[xin] > s_x[tou] + E[k].cost && E[k].flow)
{
s_x[xin] = s_x[tou] + E[k].cost;
mer[xin] = k;
if(!mark[xin])
{
mark[xin] = 1;
q.push(xin);
}
}
}
}
return mer[t] != -1;
} int M_C_Flow(int s ,int t ,int n)
{
int mincost = 0 ,maxflow = 0 ,minflow;
while(spfa(s ,t ,n))
{
minflow = INF;
for(int i = mer[t] ;i + 1 ;i = mer[E[i].from])
if(minflow > E[i].flow) minflow = E[i].flow;
for(int i = mer[t] ;i + 1 ;i = mer[E[i].from])
{
E[i].flow -= minflow;
E[i^1].flow += minflow;
mincost += minflow * E[i].cost;
}
maxflow += minflow;
}
return mincost;
} int main ()
{
int n ,m ,i ,a ,b ,c;
while(~scanf("%d %d" ,&n ,&m))
{
memset(list ,0 ,sizeof(list));
tot = 1;
for(i = 1 ;i <= m ;i ++)
{
scanf("%d %d %d" ,&a ,&b ,&c);
add(a ,b ,c ,1);
add(b ,a ,c ,1);
}
add(0 ,1 ,0 ,2);
printf("%d\n" ,M_C_Flow(0 ,n ,n));
}
return 0;
}

      

最新文章

  1. sublime work flow
  2. oracle 隐藏过长字段
  3. 端口转发后执行putty连接------------------》VirtualBox+ubuntu_server
  4. 基于HTTP的直播点播HLS
  5. .net MVC 下载文件乱码问题解决方案
  6. JBoss - 调整JVM内存 -Xms512m -Xmx1024m
  7. mybatis学习(一)一个在idea下的实例
  8. freemarker中遍历list&lt;map&lt;String,String&gt;&gt;
  9. ZXing工具类v1.0
  10. 大数据应用日志采集之Scribe 安装配置指南
  11. Linux实战教学笔记17:精简shell基础
  12. 非常棒的教程记录(UML)
  13. c# 正则验证
  14. [转帖]Office全版本零售版转换VOL
  15. 修改element ui 默认样式最好的解释
  16. db2删除表中数据
  17. OpenCV自带dnn的Example研究(3)— object_detection
  18. ERROR 1666 (HY000): Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT.
  19. JAVA初学者的JDB 尝试
  20. CF724F Uniformly Branched Trees

热门文章

  1. 记一次Linux内核崩溃:kdump,crash,vmcore
  2. Java 基础加强 02
  3. SpringCloud-服务与注册
  4. C# 应用 - 使用 HttpListener 接受 Http 请求
  5. 浅析MyBatis(一):由一个快速案例剖析MyBatis的整体架构与运行流程
  6. android分析之智能指针
  7. 1.mysql读写
  8. vscode远程连接linux服务器,可视化绘图
  9. 8、Spring教程之静态代理/动态代理
  10. cookie跨域那些事儿