题意:

      就是从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. Java多态练习题

    需求: 宠物饿了,需要铲屎官给宠物喂食. 不同宠物吃的东西不一样. 不同宠物恢复后体力值不一样. 铲屎官和狗狗玩接飞盘游戏,狗狗健康值减少10,与铲屎官亲密度增加5 铲屎官和 企鹅玩游泳游戏,企鹅健康 ...

  2. .NET CORE 3.1 MVC Log4net

    1 引用包:Microsoft.Extensions.Logging.Log4Net.AspNetCore   2 ILoggerFactory loggerFactory 注册 public voi ...

  3. 从零搭建一个IdentityServer——单页应用身份验证

    上一篇文章我们介绍了Asp.net core中身份验证的相关内容,并通过下图描述了身份验证及授权的流程: 注:改流程图进行过修改,第三方用户名密码登陆后并不是直接获得code/id_token/acc ...

  4. 盘点Excel中的那些有趣的“bug”

    本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Excel 1.0早在1985年正式进入市场,距今已经有36年了,虽然在推出 ...

  5. 性能追击:万字长文30+图揭秘8大主流服务器程序线程模型 | Node.js,Apache,Nginx,Netty,Redis,Tomcat,MySQL,Zuul

    本文为<高性能网络编程游记>的第六篇"性能追击:万字长文30+图揭秘8大主流服务器程序线程模型". 最近拍的照片比较少,不知道配什么图好,于是自己画了一个,凑合着用,让 ...

  6. LeetCode 175. Combine Two Tables 【MySQL中连接查询on和where的区别】

    一.题目 175. Combine Two Tables 二.分析 连接查询的时候要考虑where和on的区别 where : 查询时,连接的时候是必须严格满足条件的,满足了才会加入到临时表中. on ...

  7. HTML标签解读

    因为最近在学习爬虫,那么在爬取网页内容时,就要求我们能够简单的看懂这个网页的基本结构,才能更好的去爬取我们所需要的内容. 这篇随笔也只是简单的说明了一些标签的含义. 标签关系 包含关系 eg:< ...

  8. Quartz基础使用

    Quartz基本组成部分: 调度器:Scheduler 任务:JobDetail 触发器:Trigger,包括SimpleTrigger和CronTrigger . using Quartz; usi ...

  9. 世界国省市区SQL语句(mysql)

    CREATE TABLE loctionall ( country VARCHAR(40) , provice VARCHAR(40) , city VARCHAR(40) , CONSTRAINT ...

  10. 有必要了解的大数据知识(一) Hadoop

    前言 之前工作中,有接触到大数据的需求,虽然当时我们体系有专门的大数据部门,但是由于当时我们中台重构,整个体系的开发量巨大,共用一个大数据部门,人手已经忙不过来,没法办,为了赶时间,我自己负责的系统的 ...