题意:

      就是从1走到n然后再走回来,一条边只能走一次,要求路径最短。

思路:

      比较水,可以直接一遍费用流,不解释了,具体的看看代码,敲这个题就是为了练

练手,好久不敲了,怕比赛手生。

 

#include<queue>

#include<stdio.h>

#include<string.h>

#define N_node 1000 + 10

#define N_edge 40000 + 20

#define INF 100000000

using namespace std;

typedef struct

{

   int from ,to ,cost ,flow ,next;

}STAR;

STAR E[N_edge];

int list[N_node] ,tot;

int mer[N_edge];

int s_x[N_node];

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)

{

    int mark[N_node] = {0};

    for(int i = 0 ;i <= n ;i ++) s_x[i] = INF;

    mark[s] = 1 ,s_x[s] = 0;

    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 maxflow = 0 ,mincost = 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);

       add(n ,n + 1 ,0 ,2);

       printf("%d\n" ,M_C_Flow(0 ,n + 1 ,n + 1));

    }

    return 0;

}

         

 

 

   

   

   

   

    

 

 

 

 

 

 

 

POJ2135 来回最短路(简单费用流)的更多相关文章

  1. POJ 2135 简单费用流

    题意:       题意是一个人他要从牧场1走到牧场n然后在走回来,每条路径只走一次,问全程的最短路径是多少. 思路:        这个题目挺简单的吧,首先要保证每条边只能走一次,然后还要要求费用最 ...

  2. POJ3422简单费用流

    题意:      给一个n*n的矩阵,从左上角走到右下角,的最大收益,可以走k次,每个格子的价值只能取一次,但是可以走多次. 思路:       比较简单的一个费用流题目,直接拆点,拆开的点之间连接两 ...

  3. POJ 2135 Farm Tour &amp;&amp; HDU 2686 Matrix &amp;&amp; HDU 3376 Matrix Again 费用流求来回最短路

    累了就要写题解,近期总是被虐到没脾气. 来回最短路问题貌似也能够用DP来搞.只是拿费用流还是非常方便的. 能够转化成求满流为2 的最小花费.一般做法为拆点,对于 i 拆为2*i 和 2*i+1.然后连 ...

  4. 最短路&生成树&二分图匹配&费用流问题

    最短路 题意理解,建图 https://vjudge.net/problem/UVALive-4128 飞机票+行程建图 https://vjudge.net/problem/UVALive-3561 ...

  5. 【bzoj2324】[ZJOI2011]营救皮卡丘 最短路-Floyd+有上下界费用流

    原文地址:http://www.cnblogs.com/GXZlegend/p/6832504.html 题目描述 皮卡丘被火箭队用邪恶的计谋抢走了!这三个坏家伙还给小智留下了赤果果的挑衅!为了皮卡丘 ...

  6. Mining Station on the Sea HDU - 2448(费用流 || 最短路 && hc)

    Mining Station on the Sea Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  7. poj2135 Farm Tour(费用流)

    Description When FJ's friends visit him on the farm, he likes to show them around. His farm comprise ...

  8. HDU4807 Lunch Time(费用流变种)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4807 Description The campus of Nanjing Universit ...

  9. 洛谷P4003 无限之环(infinityloop)(网络流,费用流)

    洛谷题目传送门 题目 题目描述 曾经有一款流行的游戏,叫做 Infinity Loop,先来简单的介绍一下这个游戏: 游戏在一个 n ∗ m 的网格状棋盘上进行,其中有些小方格中会有水管,水管可能在格 ...

随机推荐

  1. freebsd升级时出错,没有ntp用户解决

    freebsd升级出错,没有ntp用户 终端执行命令 pw groupadd ntpd -g 123 pw useradd ntpd -u 123 -g ntpd -h - -d /var/db/nt ...

  2. FreeBSD 家图谱

    https://cgit.freebsd.org/src/tree/share/misc/bsd-family-tree

  3. JetBrains Projector 体验

    先来一张最终效果图: JetBrains Projector 是 JetBrains 的"远程开发"解决方案,基于 Client + Server 架构,对标的是微软 VSCode ...

  4. 基于Hive进行数仓建设的资源元数据信息统计:Hive篇

    在数据仓库建设中,元数据管理是非常重要的环节之一.根据Kimball的数据仓库理论,可以将元数据分为这三类: 技术元数据,如表的存储结构结构.文件的路径 业务元数据,如血缘关系.业务的归属 过程元数据 ...

  5. 一键部署etcd集群管理脚本

    一.编写脚本 1 #!/bin/sh 2 # 安装 3 # ./run.sh etcd03 etcd01=http://192.168.2.44:2380,etcd02=http://192.168. ...

  6. TypeError: Can't convert 'int' object to str implicitly Python常见错误

    尝试连接非字符串值与字符串 想要字符串连接非字符串需要先进行强制转化 可以用str()函数 --------------------------------

  7. CentOS7 搭建 K8S 环境

    前期准备 环境规划 K8S 与Docker兼容问题 k8s v1.18.0 => Docker v18.x k8s v1.19.0 => Docker v19.x 软件 版本 Linux操 ...

  8. [图论]最短网络:prim

    最短网络 目录 最短网络 Description Input Output Sample Input Sample Output 解析 代码 Description 农民约翰被选为他们镇的镇长!他其中 ...

  9. 结对作业-stage_2

    见队友博客:结对编程-stage_2

  10. 死磕Spring之AOP篇 - Spring AOP自动代理(一)入口

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...