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.导致出现安全问题的原因: A:是否是多线程环境 B:是否有共享数据 C:是否有多条语句操作共享数据 2.解决线程安全问题方法: 同步代码块: synchronized(对象){ 需要同步的代码; ...
- 微信浏览器HTTP_USER_AGENT判断
微信公众平台开发 微信公众平台开发者 微信公众平台开发模式 微信浏览器 HTTP_USER_AGENT作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/archiv ...
- @angular/cli项目构建--animations
使用方法一(文件形式定义): animations.ts import { animate, AnimationEntryMetadata, state, style, transition, tri ...
- KVM- 日常管理与配置
KVM虚拟机的管理主要是通过virsh命令对虚拟机进行管理. 1. 查看KVM虚拟机配置文件及运行状态 (1) KVM虚拟机默认配置文件位置: /etc/libvirt/qemu/ autostar ...
- msyql中myism和innodb的区别
MyISAM存储引擎 MyISAM是 默认存储引擎.它基于更老的ISAM代码,但有很多有用的扩展.MyISAM存储引擎的一些特征: ●所有数据值先存储低字节.这使得数据机和操作系统分离.二进制轻便性的 ...
- CANopenNode drvTemplate/CO_driver.h hacking
/************************************************************************ * CANopenNode drvTemplate/ ...
- LeetCode Binary Tree Tilt
原题链接在这里:https://leetcode.com/problems/binary-tree-tilt/description/ 题目: Given a binary tree, return ...
- python+rabbitmq实现分布式
#master # -*- coding: utf-8 -*-import sys#reload(sys)sys.setdefaultencoding("utf-8") impor ...
- 1、Monkey入门准备教程
1.前提需要Android环境 ADT:链接: https://pan.baidu.com/s/1QN6EJh46cJGvUBaMZjtiWw 密码: a7zu Eclipse:https://www ...
- boost1_55_0编译和安装
1.在www.boost.org下载文件并解压 2.进行解压目录 2.1 编译前的配置工作 执行bootstrap.bat windows 使用vs2010: 修改\boost_1_55_0\too ...