BZOJ 1922--大陆争霸(最短路)
1922: [Sdoi2010]大陆争霸
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 2113 Solved: 947
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 2 1
1 4 3
2 3 1
2 5 2
4 6 2
5 3 2
0
0
0
1 3
0
2 3 5
Sample Output
HINT
对于 20%的数据,满足 N≤15,M≤50;
对于 50%的数据,满足 N≤500,M≤6,000;
对于 100%的数据,满足 N≤3,000,M≤70,000,1≤wi≤108
。
输入数据保证一定有解,且不会存在维持某个城市结界的结界发生器在这个
城市内部。
连接两个城市的道路可能不止一条, 也可能存在一个城市自己到自己的道路。
题目链接:
http://www.lydsy.com/JudgeOnline/problem.php?id=1922
Solution
如果要要进入某个城市,首先要进入几个特定的点。。。
于是进入某个城市的时间就是到达该城市和进入其他特定城市的时间的最大值。。。
于是跑一遍最短路就好了。。。。
代码
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int INF=0x3f3f3f3f;
int n,m;
int d[3010],d1[3010],d2[3010],l[3010];
int a[3010][3010];
bool vis[3010];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
struct edge{
int v,next,w;
}e[70010];
int cnt,head[3010];
void insert(int u,int v,int w){
e[++cnt].v=v;
e[cnt].next=head[u];
e[cnt].w=w;
head[u]=cnt;
}
void dijkstra(){
memset(d1,0x3f,sizeof(d1));
q.push(make_pair(0,1));
d1[1]=0;
while(!q.empty()){
int now=q.top().second;
q.pop();
if(vis[now]) continue;
vis[now]=1;
int mx=max(d1[now],d2[now]);
for(int i=head[now];i;i=e[i].next)
if(mx+e[i].w<d1[e[i].v]){
d1[e[i].v]=mx+e[i].w;
int tmp=max(d1[e[i].v],d2[e[i].v]);
if(!d[e[i].v]) q.push(make_pair(tmp,e[i].v));
}
for(int i=1;i<=l[now];i++){
int t=a[now][i];
d[t]--;
d2[t]=max(d2[t],mx);
int tmp=max(d1[t],d2[t]);
if(!d[t]) q.push(make_pair(tmp,t));
}
}
printf("%d\n",max(d1[n],d2[n]));
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
if(u!=v) insert(u,v,w);
}
for(int i=1;i<=n;i++){
scanf("%d",&d[i]);
for(int j=1;j<=d[i];j++){
int u;
scanf("%d",&u);
a[u][++l[u]]=i;
}
}
dijkstra();
return 0;
}
This passage is made by Iscream-2001.
BZOJ 1922--大陆争霸(最短路)的更多相关文章
- BZOJ1922:[SDOI2010]大陆争霸(最短路)
Description 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光 ...
- B1922 [Sdoi2010]大陆争霸 最短路
我一直都不会dij的堆优化,今天搞了一下...就是先弄一个优先队列,存每个点的数据,然后这个题就加了一点不一样的东西,每次的最短路算两次,一次是自己的最短路,另一次是机关的最短路,两者取最大值才是该点 ...
- BZOJ-1922 大陆争霸 多限制、分层图最短路 (堆+dijkstra)
1922: [Sdoi2010]大陆争霸 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1154 Solved: 478 [Submit][Status ...
- 【BZOJ1922】大陆争霸(最短路)
[BZOJ1922]大陆争霸(最短路) 题面 BZOJ 洛谷 题解 最短路变形题. 定义\(dis\)表示最短路,\(d\)表示最早可以进入当前点的时间.显然\(d=max(max(dis_v,d_v ...
- 洛谷 P2446 [SDOI2010]大陆争霸 解题报告
P2446 [SDOI2010]大陆争霸 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉 ...
- bzoj1922 [SDOI2010]大陆争霸 分层图
问题描述 幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...
- AC日记——[SDOI2010]大陆争霸 洛谷 P3690
[SDOI2010]大陆争霸 思路: dijkstra模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn ...
- bzoj 1922 [Sdoi2010]大陆争霸(最短路变形)
Description 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光 ...
- BZOJ 1922: [Sdoi2010]大陆争霸
Description 一个无向图,到一个点之前需要先到其他点,求从第一个点到第 \(n\) 点最短时间. Sol 拓扑+Dijkstra. 跑Dijkstra的时候加上拓扑序... 用两个数组表示 ...
随机推荐
- arcgis mpk 打包地图 (数据管理)
摘要 来自:http://help.arcgis.com/zh-cn/arcgisdesktop/10.0/help/index.html#/na/0017000000q5000000/ 对地图文档以 ...
- 搭建简单的Spring框架
1.Spring框架相关jar包下载地址http://repo.springsource.org/libs-release-local/org/springframework/spring,复制,进入 ...
- UNITY_INITIALIZE_OUTPUT宏
UNITY_INITIALIZE_OUTPUT宏 UNITY_INITIALIZE_OUTPUT(type,name) –此宏用于将给定类型的名称变量初始化为零.在使用旧版标准所写的Shader时,经 ...
- merage语句
MERGE INTO [credit].[record_rule_data] AS a USING @tem AS b ON a.user_gid =@userLogGid AND a.r ...
- Python打包工具
打包Python应用,使用工具: 1.Linux和Windows下,使用pyinstaller pyinstaller -F -w XXX.py 在当前文件夹下生成两个文件夹:build .dist ...
- C++ std::thread
std::thread Defined in header class thread The class thread represents a single thread of execution. ...
- java工具类 --千分位方法
/** * 千分位方法 * @param text * @return */ public static String fmtMicrometer(String text) { DecimalForm ...
- labview使用场景
测试测量:LABVIEW [6] 最初就是为测试测量而设计的,因而测试测量也就是现在LABVIEW最广泛的应用领域.经过多年的发展,LABVIEW在测试测量领域获得了广泛的承认.至今,大多数主流的测 ...
- Java中二叉排序树
package com.ietree.basic.datastructure.tree; import java.util.ArrayDeque; import java.util.ArrayList ...
- 如何让多个android listview同时使用一个滚动条
如何让多个android listview同时使用一个滚动条 重新设置ListView的高度 /** * 设置listview高度,注意listview子项必须为LinearLayout才能调用该方法 ...