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 ...
随机推荐
- 以前的实验博客地址,以前使用csdn
实验一木马分析(隐藏分析)实验 http://blog.csdn.net/qq_30600405/article/details/78360599 实验二木马分析(控制分析)实验和实验三冰河木马实验 ...
- 如何卸载Python通过setup.py安装的模块
0,pip uninstall xxxx 1.找到egg sudo easy_install -m BitVector .... Using /usr/local/lib/python2./ ...
- Oracle使用总结一
一.修改表名要修改索引以及主键 ALTER TABLE AFA_AUTH_FUNCTION RENAME TO BACK_AFA_AUTH_FUNCTION ----修改表名 alter table ...
- Vue 中的 computed 和 methods
Vue 中的 computed 和 methods 使用 computed 性能会更好. 如果你不希望缓存,可以使用 methods 属性.
- 扒站工具Teleport Pro教程
1.下载软件 http://www.jb51.net/softs/44134.html 2.安装 3.界面 先点开帮助点注册(类似于破解要不全站扒不全) 下面请看ppt, http://www.doc ...
- Mezzanine汉化
1.编辑/path/to/projectname/projectname下的setting.pyALLOWED_HOSTS = ['www.xxx.com'] 为了使用域名来访问TIME_ZONE = ...
- sourcetree 安装与操作
sourcetree操作 http://www.jianshu.com/p/be9f0484af9d SourceTree安装教程和GitLab配置详解 http://www.cnblogs.com/ ...
- array_diff函数的注意事项
array_diff — 计算数组的差集 说明: array array_diff ( array $array1 , array $array2 [, array $... ] ) 对比返回在 ar ...
- .Net 一直在改变
Microsoft 微软又进一步了,每天都有惊喜. MSDN,是微软官网开发者技术支持网络,今天给我一个小惊喜,不多说直接上图.分享给大家 右键新打开Tab选项,就能看到官方的源码实现.为我们学习提供 ...
- angular之增删改查
<!DOCTYPE html> <html lang="en" ng-app="app"> <head> <meta ...