题目意思很简单,就是求最短路,但是,路径是单向的,所以要正着dij一遍,反着dij一遍,再求两次和的最大值,也可以创建两个图,这样,只要对两个图分别dij一遍一次,就不要写两个dij函数了,普通dij很久没复习了,来学习一下堆优化后的dij吧,提交代码只要了35ms的时间。

问题 A: 蔡老板的会议

时间限制: 2 Sec  内存限制: 128 MB
提交: 269  解决: 27
[提交][状态][讨论版]

题目描述

图灵杯个人赛就要开始了,蔡老板召集俱乐部各部门的部长开会。综合楼有N (1<=N<=1000)间办公室,

编号1~N每个办公室有一个部长在工(mo)      作(yu),

其中X号是蔡老板的办公室,会议也将在X(1<=X<=N)号办公室举行。综合楼的构造极其特殊,

这N个办公室之间M(1<=M<=100,000)条单向      走廊。通过第i条路将需要花费Ti(1<=Ti<=100)单位时间。
     由于工作很忙,开完会之后各部长需要返回自己的办公室。他们会选择最短时间的最优路径。
     为了合理安排接下来的工作,蔡老板想知道,【来回最久的】【!!!】那个部长在路上花费的时间是多少。

输入

第一行:用空格隔开的三个数N,M和X
     接下来的M行:每行有用空格隔开的三个数Ai,Bi和Ti,表示从A点到B点花费的时间Ti

输出

一个int型的数,表示花费时间的最大值

样例输入

       4 4 11 2 12 3 13 4 34 1 3

样例输出

       8

:首先来是两个结构体

struct qnode{int v,c;qnode(int _v=0,int _c=0):v(_v),c(_c){}bool operator <(const qnode &r)const{return c>r.c;}
};

优先队列结构体,

重载qnode(int _v=0,int _c=0):v(_v),c(_c){}
bool operator <(const qnode &r)const{return c>r.c;}
//自动排序
struct edge
{int v,cost;edge(int _v=0,int _cost=0):v(_v),cost(_cost){}
};
v是图上的点,cost是权值。
再来建图函数:
void addedge(int u,int v,int w){E[u].push_back(edge(v,w));
}
堆E是一个图,E【u】.push_back是在堆E的u的这一个一维数组末尾加上一个信息,u是起始点v是到达点,cost是u到v的权值。(vector用法)。
代码如下:
#include <iostream>
#include <vector>
#include <stdio.h>
#include <queue>
#include <string.h>
#define MAXX 0x3f3f3f3f
#define siz 1005
using namespace std;
struct qnode{int v,c;qnode(int _v=0,int _c=0):v(_v),c(_c){}bool operator <(const qnode &r)const{return c>r.c;}
};
struct edge
{int v,cost;edge(int _v=0,int _cost=0):v(_v),cost(_cost){}
};
vector<edge>E[siz];
vector<edge>EE[siz];
int vis[siz];
int dist[siz];
int distt[siz];
int n,m,x;
int ans;
void dijstra(int n,int start){int i,j;memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){dist[i]=MAXX;}priority_queue<qnode>que;while(!que.empty()){que.pop();}dist[start]=0;que.push(qnode(start,0));qnode tmp;while(!que.empty()){tmp=que.top();que.pop();int u=tmp.v;if(vis[u]==1) continue;vis[u]=1;for(j=0;j<E[u].size();j++){int v=E[tmp.v][j].v;int cost=E[u][j].cost;if(!vis[v]&&dist[v]>dist[u]+cost){dist[v]=dist[u]+cost;que.push(qnode(v,dist[v]));}}}
}
void dijstra2(int n,int start){int i,j;memset(vis,0,sizeof(vis));for(i=1;i<=n;i++){distt[i]=MAXX;}priority_queue<qnode>que;while(!que.empty()){que.pop();}distt[start]=0;que.push(qnode(start,0));qnode tmp;while(!que.empty()){tmp=que.top();que.pop();int u=tmp.v;if(vis[u]==1) continue;vis[u]=1;for(j=0;j<EE[u].size();j++){int v=EE[tmp.v][j].v;int cost=EE[u][j].cost;if(!vis[v]&&distt[v]>distt[u]+cost){distt[v]=distt[u]+cost;que.push(qnode(v,distt[v]));}}}
}
void addedge(int u,int v,int w){E[u].push_back(edge(v,w));
}
void addedge2(int u,int v,int w){EE[u].push_back(edge(v,w));
}
int main()
{while(scanf("%d%d%d",&n,&m,&x)!=EOF){int a,b,t;int i,j;for(i=0;i<siz;i++){E[i].clear();EE[i].clear();}for(i=0;i<m;i++){scanf("%d%d%d",&a,&b,&t);addedge(a,b,t);addedge2(b,a,t);}ans=0;dijstra(n,x);dijstra2(n,x);for(i=1;i<=n;i++){dist[i]=dist[i]+distt[i];}ans=-1;for(i=1;i<=n;i++){if(dist[i]>ans) ans=dist[i];}cout<<ans<<endl;}return 0;
}



												

NEUQ图灵杯之A题——蔡老板的会议相关推荐

  1. 图灵杯 蔡老板的会议

    题目描述 图灵杯个人赛就要开始了,蔡老板召集俱乐部各部门的部长开会.综合楼有N (1<=N<=1000)间办公室,编号1~N每个办公室有一个部长在工(mo)作(yu),其中X号是蔡老板的办 ...

  2. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)A蔡老板的会议

    题目描述 图灵杯个人赛就要开始了,蔡老板召集俱乐部各部门的部长开会.综合楼有N (1<=N<=1000)间办公室,编号1~N每个办公室有一个部长在工(mo)作(yu),其中X号是蔡老板的办 ...

  3. 第四届“图灵杯”NEUQ-ACM程序设计人赛真题重现

    文章目录 前言 系列文章目录 一.蔡老板的会议 题目描述 分析 AC代码如下: 二.拿糖果 题目描述 分析 AC代码如下: 三.粉丝与分割平面 题目描述 分析 AC代码如下: 四.粉丝与汉诺塔 题目描 ...

  4. 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛前十题(能力有限)

    A - 大学期末现状 题目描述 作为一名大学生的你,现在又到了期末查成绩的时候,当你的成绩大于等于60时请输出"jige,haoye!",否则输出"laoshi,caic ...

  5. 第六届“图灵杯”NEUQ-ACM程序设计人赛真题重现

    文章目录 前言 系列文章目录 一.秋季特惠 题目描述 AC代码如下: 二.找工作 题目描述 分析 AC代码如下: 三.购物计划 题目描述 分析 AC代码如下: 四.蟹黄堡的配方 题目描述 分析 AC代 ...

  6. 第八届“图灵杯”NEUQ—ACM程序设计竞赛个人赛(同步赛)

    A题--切蛋糕 龙龙有一块蛋糕,现在他想将蛋糕平均切成k块,分给他的k名hxd.但是不幸的是,因为龙龙不擅长切蛋糕,他每一次只能将一块蛋糕平均分成两份.例如,将一块大小为1的蛋糕分割成两块大小为1/2 ...

  7. 第五届“图灵杯”NEUQ-ACM程序设计个人赛真题重现

    文章目录 前言 系列文章目录 一.逃出生天 题目描述 分析 AC代码如下: 二.我爱数学 题目描述 AC代码如下: 三.PJ的情书 题目描述 分析 AC代码如下: 四.Harry Potter And ...

  8. **图灵杯 J** 简单的变位词

    Description 变位词是指改变某个词的字母顺序后构成的新词.蔡老板最近沉迷研究变位词并给你扔了一道题: 给你一些单词,让你把里面的变位词分组找出来.互为变位词的归为一组,最后输出含有变位词最多 ...

  9. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛(同步赛)解题报告

    第八届"图灵杯"NEUQ-ACM程序设计竞赛个人赛(同步赛) 题目总结 A题 切蛋糕 题目信息 解题思路 如果我们将 1/k展开到二进制的形式,那么就可以计算出 需要 多少块1/( ...

最新文章

  1. goaccess在定时任务中不执行的问题
  2. 策略模式优化过多的IF ELSE
  3. python 条形图图注怎么集中注意力_如何用每个条形图的总和(Matplotlib)注释堆积条形图?...
  4. mysql查询无限下级_示例php+mysql查询实现无限下级分类树输出
  5. Poj 2503 Babelfish(Map操作)
  6. pyspark连接mysql
  7. 贪心应用--汽车加油次数问题
  8. 2-14 三级菜单
  9. 新手快速入门自动化测试第一步
  10. freemarker如何判空容错
  11. 第15天android:使用sqlite
  12. Kia#39;s Calculation(贪心)
  13. linux下c语言读写文件操作,Linux下C语言之文件操作
  14. AIScanner文字识别软件 OCR
  15. 一般信道容量的计算方法
  16. 需要管理员权限才能删除文件夹
  17. 透明网桥对数据帧的处理方式
  18. python练习题(一):输入某年某月某日,判断这一天是这一年的第几天
  19. 下载 | 数学分析八讲(修订版)
  20. 著作权范围大于版权?如何进行著作权查询?

热门文章

  1. 请使用 -source 7 或更高版本以启用 diamond 运算符_短视频 | 2分钟英语课堂:每天2分钟,让口语和听力6到飞!(7大系列374个视频)...
  2. 2011年系统架构师考试题详解
  3. VS2017使用点滴
  4. Fluent求解器——亚松弛因子
  5. 5.C语言二分法求方程解
  6. 对不起navicat我投入了DataGrip的怀抱
  7. linux内核空间内存动态申请
  8. [半监督学习] Democratic Co-Learning
  9. leetcode 883. 三维形体投影面积(python)
  10. 软件测试之边界值测试法