传送门

分析

我们高兴的发现数据范围特别小,所以我们可以随便搞。因为一共只砍掉一条路,所以我们先算出对于任意一个点如果将它的出边割掉一条则它到达终点的最坏情况的最短距离是多少,然后我们从终点向起点反着跑,按最短路思想算出答案即可,具体实现见代码。

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define sp cout<<"---------------------------------------------------"<<endl;
  4. const int inf=0x3f3f3f3f;
  5. class WarTransportation{
  6. public:
  7. int head[],nxt[],to[],w[],cnt;
  8. int d2[],d[],vis[],bad[];
  9. int head2[],nxt2[],to2[],w2[],cnt2;
  10. priority_queue<pair<int,int> >q;
  11. void add(int x,int y,int z){
  12. nxt[++cnt]=head[x];
  13. head[x]=cnt;
  14. to[cnt]=y;
  15. w[cnt]=z;
  16. nxt2[++cnt2]=head2[y];
  17. head2[y]=cnt2;
  18. to2[cnt2]=x;
  19. w2[cnt2]=z;
  20. }
  21. int ndij(int s,int N){
  22. memset(vis,,sizeof(vis));
  23. memset(d,0x3f,sizeof(d));
  24. d[s]=;
  25. q.push(make_pair(,s));
  26. while(!q.empty()){
  27. int x=q.top().second;
  28. q.pop();
  29. if(vis[x])continue;
  30. vis[x]=;
  31. for(int i=head[x];i;i=nxt[i])
  32. if(i!=N||x!=s){
  33. int y=to[i];
  34. if(d[x]+w[i]<d[y]){
  35. d[y]=d[x]+w[i];
  36. q.push(make_pair(-d[y],y));
  37. }
  38. }
  39. }
  40. return d[];
  41. }
  42. void getbad(int n){
  43. int i,j;
  44. memset(bad,,sizeof(bad));
  45. for(i=;i<=n;i++)
  46. if(i!=)
  47. for(j=head[i];j;j=nxt[j])
  48. bad[i]=max(bad[i],ndij(i,j));
  49. }
  50. int getans(){
  51. memset(vis,,sizeof(vis));
  52. memset(d2,0x3f,sizeof(d2));
  53. d2[]=;
  54. q.push(make_pair(,));
  55. while(!q.empty()){
  56. int x=q.top().second;
  57. q.pop();
  58. if(vis[x])continue;
  59. vis[x]=;
  60. for(int i=head2[x];i;i=nxt2[i]){
  61. int y=to2[i];
  62. if(max(bad[y],d2[x]+w2[i])<d2[y]){
  63. d2[y]=max(bad[y],d2[x]+w2[i]);
  64. q.push(make_pair(-d2[y],y));
  65. }
  66. }
  67. }
  68. if(d2[]>=inf)return -;
  69. return d2[];
  70. }
  71. int messenger(int n,vector<string>highways){
  72. int x,y,z;char ch;
  73. stringstream buf(accumulate(highways.begin(),highways.end(),string()));
  74. do{
  75. buf>>x>>y>>z;
  76. add(x,y,z);
  77. }while(buf>>ch);
  78. getbad(n);
  79. return getans();
  80. }
  81. };

WarTransportation TopCoder - 8404的更多相关文章

  1. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  5. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  6. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. yeomen/bower/grunt

    yeomen: npm install yo angular-in-action project npm install -g generator-angular npm install -g gen ...

  2. PHP封装返回Ajax字符串和JSON数组

    <?php class DBDA { public $host="localhost"; public $uid = "root"; public $pw ...

  3. Gym - 100502G Outing (强连通缩点+树形依赖背包)

    题目链接 问题:有n个人,最多选k个,如果选了某个人就必须选他指定的另一个人,问最多能选多少个人. 将每个人所指定的人向他连一条单向边,则每一个点都有唯一的前驱,形成的图是个基环树森林,在同一个强连通 ...

  4. 《Javascript高级程序设计》阅读记录(二):第四章

    这个系列之前文字地址:http://www.cnblogs.com/qixinbo/p/6984374.html 这个系列,我会把阅读<Javascript高级程序设计>之后,感觉讲的比较 ...

  5. acm 士兵杀敌(一)

    士兵杀敌(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军现在 ...

  6. scala 定时器

    假如我们要开发一个定时器,该定时器每秒钟执行一定的动作,我们如何把要执行的动作传给定时器?最直观的回答是:传一个实现动作的函数(function) object Helloworld { def on ...

  7. (转)AppCan中调用系统浏览器打开网页

    <!DOCTYPE html> <html> <head> <style>body{ background:#fff; font-size:30px;} ...

  8. who命令参数及用法详解(linux查看在线用户命令)

    功能说明:显示目前登入系统的用户信息.  语 法:who [-Himqsw][--help][--version][am i][记录文件]  补充说明:执行这项指令可得知目前有那些用户登入系统,单独执 ...

  9. AllowsTransparency和WebBrowser兼容性问题解决方案

    AllowsTransparency和System.Windows.Controls.WebBrowser兼容性问题,能看这篇文章,所以原因也不用多说:最根本的就是因为MS对win32底层的WebBr ...

  10. 三种web性能压力测试工具

    三种web性能压力测试工具http_load webbench ab小结 题记:压力和性能测试工具很多,下文讨论的是我觉得比较容易上手,用的比较多的三种 http_load 下载地址:http://w ...