//Accepted    1124 KB    0 ms
 #include <cstdio>
 #include <cstring>
 #include <iostream>
 #include <queue>
 #include <cmath>
 #include <algorithm>
 using namespace std;
 /**
   * This is a documentation comment block
   * 如果有一天你坚持不下去了,就想想你为什么走到这儿!
   * @authr songt
   */
 ;
 ;
 const long long inf = 100000000000000LL;
 struct node
 {
     int u,v,c;
     node()
     {

     }
     node(int u,int v,int c):u(u),v(v),c(c)
     {

     }
 }p[imax_e],rp[imax_e];
 int head[imax_n];
 int next[imax_e];
 int rhead[imax_n];
 int rnext[imax_e];
 int e;
 int re;
 long long dis[imax_n];
 long long cost[imax_n];
 bool vis[imax_n];
 int n,m,x;
 void init()
 {
     e=;
     re=;
     memset(head,-,sizeof(head));
     memset(next,-,sizeof(next));
     memset(rhead,-,sizeof(rhead));
     memset(rnext,-,sizeof(rnext));
 }
 void addEdge(int u,int v,int c)
 {
     p[e]=node(u,v,c);
     next[e]=head[u];
     head[u]=e++;
 }
 void raddEdge(int u,int v,int c)
 {
     rp[re]=node(u,v,c);
     rnext[re]=rhead[u];
     rhead[u]=re++;
 }
 queue<int > q;
 int cnt[imax_n];
 bool relax(int u,int v,int c)
 {
     if (dis[v]>dis[u]+c)
     {
         dis[v]=dis[u]+c;
         return true;
     }
     return false;
 }
 bool spfa(int src,int h[],int nt[],node p[])
 {
     memset(cnt,,sizeof(cnt));
     while (!q.empty()) q.pop();
     memset(vis,,sizeof(vis));
     q.push(src);
     vis[src]=true;
     ;i<=n;i++)
     dis[i]=inf;
     dis[src]=;
     while (!q.empty())
     {
         int pre=q.front();
         q.pop();
         vis[pre]=false;
         ;i=nt[i])
         {
             if (relax(pre,p[i].v,p[i].c) && !vis[p[i].v])
             {
                 if ((++cnt[p[i].v])>n) return false;
                 vis[p[i].v]=true;
                 q.push(p[i].v);
             }
         }
     }
     return true;
 }
 long long slove()
 {
     int u,v,c;
     init();
     ;i<=m;i++)
     {
         scanf("%d%d%d",&u,&v,&c);
         addEdge(u,v,c);
         raddEdge(v,u,c);
     }
     ;
     spfa(x,head,next,p);
     ;i<=n;i++)
     {
         cost[i]=dis[i];
         //printf("dis[%d]=%d\n",i,dis[i]);
     }
     spfa(x,rhead,rnext,rp);
     ;i<=n;i++)
     {
         //printf("cost[%d]=%d\n",i,dis[i]);
         if (cost[i]+dis[i]>ans)
         ans=cost[i]+dis[i];
     }
     return ans;
 }
 int main()
 {
     while (scanf("%d%d%d",&n,&m,&x)!=EOF)
     {
         __int64 ans=slove();
         printf("%I64d\n",ans);
     }
     ;
 }

poj3268 最短路的更多相关文章

  1. poj-3268最短路

    title: poj-3268最短路 date: 2018-10-13 15:54:34 tags: acm 刷题 categories: ACM-最短路 概述 这是一道最短路的模板题,,,不过虽然是 ...

  2. POJ-3268(来回最短路+dijkstra算法)

    Silver Cow Party POJ-3268 这题也是最短路的模板题,只不过需要进行两次求解最短路,因为涉及到来回的最短路之和. 该题的求解关键是:求解B-A的最短路时,可以看做A是起点,这就和 ...

  3. POJ3268 Silver Cow Party Dijkstra最短路

    Description One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to atten ...

  4. POJ-3268.SilverCowParty.(最短路 + 图的转置)

    本题思路:对原图和原图的逆图分别用一次最短路,找出最大值即可. 一开始是我是对每个顶点spfa搜了一波,结果判题时间巨长,还好这个题的数据量不是很大,所以就用了另一种思路. 参考代码:spfa单结点爆 ...

  5. (最短路)Silver Cow Party --POJ--3268

    题目链接: http://poj.org/problem?id=3268 题意: 先求出所有牛到x的最短路,再求出x到所有牛的最短路,两者相加取最大值(单向图)(可以用迪杰斯特拉,SPFA) 迪杰斯特 ...

  6. POJ3268 Silver Cow Party【最短路】

    One cow from each of N farms (1 ≤ N ≤ 1000) conveniently numbered 1..N is going to attend the big co ...

  7. 来回最短路POJ3268

    这个题得主要考点在于给你的图是去了再回来得有向图,如何模块化解决呢就是转变图的方向,我们根据初始得放心求出每个点到x得最短路,然后转变所有路得方向再求出所有点到x得最短路,最后一相加就是最后的来回了~ ...

  8. POJ3268【最短路】

    题意: n个点m条有向边,每个点有一头牛,每头牛会沿着各自的最短路先到x点,然后又从x点到各自的点,求这些牛中间最短路程最大的牛. 思路: 从x点到各点的最短路不用说了,裸的最短路: 但是从所有点到x ...

  9. POJ3268 Silver Cow Party —— 最短路

    题目链接:http://poj.org/problem?id=3268 Silver Cow Party Time Limit: 2000MS   Memory Limit: 65536K Total ...

随机推荐

  1. Css Study - 横向MENU

    http://cssmenumaker.com/menu/tabbed-chrome-and-blue HTML <div id="topMenu"> <ul&g ...

  2. 04-时序逻辑电路设计之计数器——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献 实验目的:以计数器为例学会简单的时序逻辑电路设计 实验平台:芯航线FPGA核心板 实验原理: 时序逻辑电路是指电路任何时刻的稳态输出不仅取决于当前的输入,还与前一时刻输入 ...

  3. SpringMVC框架的基础知识;

    首先 在javaEE环境下,建立一个动态的web工程: 导入架包.... 建立一对多映射关系的封装类,这儿只写属性,getter和setter方法就不写了: 1: private String pro ...

  4. 关于NSLog

    #ifdef __OBJC__#ifdef DEBUG#define NSLog(fmt,...) NSlog((@"%s [Line %d]" fmt),__PRETTY_FUN ...

  5. ArrayList&LinkedList&Map&Arrays

    Java集合框架 1:集合接口 1.1:Collection接口 Collection接口是构造集合框架的基础.它声明所有类集合都将拥有的核心方法 Boolean add(Object obj) 将o ...

  6. Maven学习(二) -- 坐标和依赖

    标签(空格分隔): 学习笔记 坐标 实际就像在几何中,我们用一对坐标(x, y)来表示坐标系中唯一的点:或者我们可以用(经度,纬度)来表示地球上的某一个位置,在Maven的世界中,有坐标来唯一的表示项 ...

  7. Arduino学习笔记二:修改LED点灯程序

    看了开源社区的LED控制程序,开始上手代码编写,修改,下载以及调试,原文地址:http://www.arduino.cn/thread-1072-1-1.html,这个帖子写的比较通俗易懂. 自己移植 ...

  8. Linux文本流

    Linux文本流   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 文本流 文件用于数据的存储,相当于一个个存储数据的房子.我们 ...

  9. Cron表达式简单学习

    CronTriggers往往比SimpleTrigger更有用,如果您需要基于日历的概念,而非SimpleTrigger完全指定的时间间隔,复发的发射工作的时间表.CronTrigger,你可以指定触 ...

  10. js中的fadeIn()

    一.fadeIn()淡入,fadeOut()淡出 fadeIn()和fadeOut()括号里边跟执行的时间