WarTransportation TopCoder - 8404
分析
我们高兴的发现数据范围特别小,所以我们可以随便搞。因为一共只砍掉一条路,所以我们先算出对于任意一个点如果将它的出边割掉一条则它到达终点的最坏情况的最短距离是多少,然后我们从终点向起点反着跑,按最短路思想算出答案即可,具体实现见代码。
代码
#include<bits/stdc++.h>
using namespace std;
#define sp cout<<"---------------------------------------------------"<<endl;
const int inf=0x3f3f3f3f;
class WarTransportation{
public:
int head[],nxt[],to[],w[],cnt;
int d2[],d[],vis[],bad[];
int head2[],nxt2[],to2[],w2[],cnt2;
priority_queue<pair<int,int> >q;
void add(int x,int y,int z){
nxt[++cnt]=head[x];
head[x]=cnt;
to[cnt]=y;
w[cnt]=z;
nxt2[++cnt2]=head2[y];
head2[y]=cnt2;
to2[cnt2]=x;
w2[cnt2]=z;
}
int ndij(int s,int N){
memset(vis,,sizeof(vis));
memset(d,0x3f,sizeof(d));
d[s]=;
q.push(make_pair(,s));
while(!q.empty()){
int x=q.top().second;
q.pop();
if(vis[x])continue;
vis[x]=;
for(int i=head[x];i;i=nxt[i])
if(i!=N||x!=s){
int y=to[i];
if(d[x]+w[i]<d[y]){
d[y]=d[x]+w[i];
q.push(make_pair(-d[y],y));
}
}
}
return d[];
}
void getbad(int n){
int i,j;
memset(bad,,sizeof(bad));
for(i=;i<=n;i++)
if(i!=)
for(j=head[i];j;j=nxt[j])
bad[i]=max(bad[i],ndij(i,j));
}
int getans(){
memset(vis,,sizeof(vis));
memset(d2,0x3f,sizeof(d2));
d2[]=;
q.push(make_pair(,));
while(!q.empty()){
int x=q.top().second;
q.pop();
if(vis[x])continue;
vis[x]=;
for(int i=head2[x];i;i=nxt2[i]){
int y=to2[i];
if(max(bad[y],d2[x]+w2[i])<d2[y]){
d2[y]=max(bad[y],d2[x]+w2[i]);
q.push(make_pair(-d2[y],y));
}
}
}
if(d2[]>=inf)return -;
return d2[];
}
int messenger(int n,vector<string>highways){
int x,y,z;char ch;
stringstream buf(accumulate(highways.begin(),highways.end(),string()));
do{
buf>>x>>y>>z;
add(x,y,z);
}while(buf>>ch);
getbad(n);
return getans();
}
};
WarTransportation TopCoder - 8404的更多相关文章
- TopCoder kawigiEdit插件配置
kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- TopCoder比赛总结表
TopCoder 250 500 ...
- Topcoder几例C++字符串应用
本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- TopCoder SRM 590
第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement Fox Ciel is going to play Gomoku with her friend ...
- Topcoder Arena插件配置和训练指南
一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...
随机推荐
- java学习笔记 --- 多线程(多线程的创建方式)
1.创建多线程方式1——继承Thread类. 步骤: A:自定义类MyThread继承Thread类. B:MyThread类里面重写run()? 为什么是run()方法呢? C:创建对象 D:启 ...
- [leetcode]_Flatten Binary Tree to Linked List
题目:将一棵二叉树履平成一个类似Linked-list的东西. 思路:该过程类似于二叉树的前序遍历,但是遍历代码,我处理不来参数的变化.没AC. -------->写的很好的解题博客 参考上述博 ...
- 输入一个链表,输出该链表中倒数第k个结点
package suanfa; import suanfa.doubleLinkedList.Node; public class solution { public Node find(Node h ...
- oracle获得当前时间,精确到毫秒并指定精确位数
oracle获得当前时间的,精确到毫秒 可以指定精确豪秒的位数 select to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff ') from dual; ...
- FastAdmin 的 Bootstrap-Table 如何合并字段?
FastAdmin 的 Bootstrap-Table 如何合并字段? ★hey-成都 14:13:34 把下面那个字段合并到上面那个字段是用什么方法 ^★暗物质-江西 14:17:21 city加上 ...
- 正值表达式匹配html标签的属性值
今天由于工作的需求,需要获取html标签的属性值,立即想到了正则表达式,标签如下: <circle id="ap_test" cx="200" cy=&q ...
- mina写入数据的过程
mina架构图 写数据.读数据触发点: 写数据: 1.写操作很简单,是调用session的write方法,进行写数据的,写数据的最终结果保存在一个缓存队列里面,等待发送,并把当前session放入f ...
- L2-020. 功夫传人(dfs+vector 或者 邻接矩阵+dij+优先队列)
L2-020. 功夫传人 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 一门武功能否传承久远并被发扬光大,是要看缘分的.一般来 ...
- Oracle RMAN 学习
Oracle RMAN 学习:三思笔记 1 进入rman Rman--物理备份(结构/数据) 1 本地db Cmd set oracle_sid=orcl 1 rman target / Rman&g ...
- 2016.5.30让窗口处于最顶层的方法,比TopMost灵活
最简单的方法Form. Activate() 稍复杂的方法用API,目前没有看出比第一种方法有什么好处(可操作其它窗口,这就是好处2016.7.31) [System.Runtime.InteropS ...