在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国。两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯普林·布拉泽。 幻想历 8012年 1月,杰森国正式宣布曾·布拉泽是他们唯一信仰的神,同 时开始迫害在杰森国的信仰斯普林·布拉泽的克里斯国教徒。 幻想历 8012年 3月2日,位于杰森国东部小镇神谕镇的克里斯国教徒发动 起义。 幻想历 8012年 3月7日,神谕镇的起义被杰森国大军以残酷手段镇压。 幻想历 8012年 3月8日,克里斯国对杰森国宣战。由数十万大军组成的克 里斯军团开至两国边境,与杰森军团对峙。 幻想历 8012年 4月,克里斯军团攻破杰森军团防线进入神谕镇,该镇幸存 的克里斯国教徒得到解放。 战争随后进入胶着状态,旷日持久。战况惨烈,一时间枪林弹雨,硝烟弥漫, 民不聊生。 幻想历 8012年 5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增。作为克里斯军团的主帅,你决定利用这一机 会发动奇袭,一举击败杰森国。具体地说,杰森国有 N 个城市,由 M条单向道 路连接。神谕镇是城市 1而杰森国的首都是城市 N。你只需摧毁位于杰森国首都 的曾·布拉泽大神殿,杰森国的信仰,军队还有一切就都会土崩瓦解,灰飞烟灭。 为了尽量减小己方的消耗,你决定使用自爆机器人完成这一任务。唯一的困 难是,杰森国的一部分城市有结界保护,不破坏掉结界就无法进入城市。而每个 城市的结界都是由分布在其他城市中的一些结界发生器维持的,如果想进入某个 城市,你就必须破坏掉维持这个城市结界的所有结界发生器。 现在你有无限多的自爆机器人,一旦进入了某个城市,自爆机器人可以瞬间 引爆,破坏一个目标(结界发生器,或是杰森国大神殿),当然机器人本身也会 一起被破坏。你需要知道:摧毁杰森国所需的最短时间。

输入格式

第一行两个正整数 N, M。 接下来 M行,每行三个正整数 \(u_i\)​,\(v_i\),\(w_i\),表示有一条从城市ui​到城市vi的单向道路,自爆机器人通过这条道路需要\(w_i\)的时间。 之后 N 行,每行描述一个城市。首先是一个正整数 li,维持这个城市结界所 使用的结界发生器数目。之后\(l_i\)个1~N 之间的城市编号,表示每个结界发生器的 位置。如果\(l_i\)​=0,则说明该城市没有结界保护,保证\(l_1\)=0 。

输出格式

仅包含一个正整数 ,击败杰森国所需的最短时间。

样例

输入样例

6 6

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

输出样例

5

往下\(\bigvee\)



















欢迎来到

星光大道!

不管是




彩蛋




巨佬blog链接




信息人生格言




词语释义




都有!


都有!


都有!


\(\bigvee\)



















\(\bigvee\)



















\(\bigvee\)



















\(\bigvee\)



















\(\bigvee\)



















继续



















我最菜了



















WQT最巨了



















orz orz orz



















sto sto sto



















W



















q



















t



















AK



















IOI!



















快到了





































Codefoces





































毁我人生!





































40M

里根=李俊泽小根根









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)

30M


愚昧=余星辰小妹妹









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)



















20M

引自JL LK

原曲:野百合也有春天

填词:蒟蒻LK

不管什么有环没环♫正环负环♫SPFA都能判

Dijkstra做的到吗♫做不做得到♫分数往下掉

各种问题单源最短♫差分约束♫玄学复杂度

在那信息技术♫图论的算法里♫SPFA也有春天








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)








\(\bigvee\)










10M













JL1 blog

JL2 blog



\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)









\(\bigvee\)



















XIBER!!!

本题作为http://119.29.55.79/contest/75 的压轴题,就是一道dijkstra的题目,只不过稍稍改了一下,比较难想到。每个节点摧毁时间=MAX(到达时间,摧毁节界时间),对到达,摧毁时间做dijkstra,每次入队更新节点入度(节界器数量),然后就可以了。

代码实现也比较优美:

#include<iostream>
#include<cstring>
#include<queue>
#define MAX 150005
#define ll long long
#define pint pair<ll,ll>
using namespace std;
ll to1[MAX],loca1[MAX],nxt1[MAX],len[MAX],top1;
ll to2[MAX],loca2[MAX],nxt2[MAX],deg[MAX],top2;
ll n,m,x,y,z;
ll dis[3003],d1[3003],d2[3003],vis[3003],num[3003];
void push1(int x,int y,int z){
to1[++top1]=y;nxt1[top1]=loca1[x];loca1[x]=top1;len[top1]=z;//push edges
}
void push2(int x,int y){
to2[++top2]=y;nxt2[top2]=loca2[x];loca2[x]=top2;//统计节界器
}
void dijkstra(){
for(int i=1;i<=n;i++)d1[i]=0x7fffffff;
priority_queue<pint, vector<pint> ,greater<pint> > q;
q.push(make_pair(0,1));
dis[1]=0;
d1[1]=0;
d2[1]=0;
while(!q.empty()){
ll x=q.top().second;
q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=loca1[x];i;i=nxt1[i]){
if(d1[to1[i]]>dis[x]+len[i]){
d1[to1[i]]=dis[x]+len[i];
if(!deg[to1[i]]){
dis[to1[i]]=max(d1[to1[i]],d2[to1[i]]);//正常dijkstra,更新距离,松弛
q.push(make_pair(dis[to1[i]],to1[i]));
}
}
}
for(int i=loca2[x];i;i=nxt2[i]){
if(deg[to2[i]]){
deg[to2[i]]--;//更新入度
d2[to2[i]]=max(dis[x],d2[to2[i]]);
if(!deg[to2[i]]){
dis[to2[i]]=max(d1[to2[i]],d2[to2[i]]);//松弛
q.push(make_pair(dis[to2[i]],to2[i]));
}
}
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)cin>>x>>y>>z,push1(x,y,z);
for(int i=1;i<=n;i++){
cin>>deg[i];
for(int j=1;j<=deg[i];j++)cin>>x,push2(x,i);
}
dijkstra();
cout<<dis[n];
}

PS:MEMSET只能用于整型数组,对于长整除了赋0会有玄学错误,我被卡了半小时,查了一下,大概是MEMSET 按1字节赋值,例如

memset(a,0x7fffffff,sizeof(a))

如果是整型没问题,如果是LONGLONG会被连赋2次,即0x7fffffff7fffffff,有时会变负数,考试时千万要谨慎,否则分就没了_QAQ_.

#348 大陆争霸(DIjkstra)的更多相关文章

  1. GDOI#348大陆争霸[SDOI2010]最短路有限制条件

    在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯普林·布拉 ...

  2. BZOJ 1922: [Sdoi2010]大陆争霸 Dijkstra

    Code: #include <queue> #include <vector> #include <cstdio> #include <cstring> ...

  3. 【BZOJ1922】[Sdoi2010]大陆争霸 Dijkstra

    Description 具体地说,杰森国有 N 个城市,由 M条单向道 路连接.神谕镇是城市 1而杰森国的首都是城市 N.你只需摧毁位于杰森国首都 的曾·布拉泽大神殿,杰森国的信仰,军队还有一切就都会 ...

  4. BZOJ-1922 大陆争霸 多限制、分层图最短路 (堆+dijkstra)

    1922: [Sdoi2010]大陆争霸 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1154 Solved: 478 [Submit][Status ...

  5. 【BZOJ1922】大陆争霸(最短路)

    [BZOJ1922]大陆争霸(最短路) 题面 BZOJ 洛谷 题解 最短路变形题. 定义\(dis\)表示最短路,\(d\)表示最早可以进入当前点的时间.显然\(d=max(max(dis_v,d_v ...

  6. 洛谷 P2446 [SDOI2010]大陆争霸 解题报告

    P2446 [SDOI2010]大陆争霸 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉 ...

  7. AC日记——[SDOI2010]大陆争霸 洛谷 P3690

    [SDOI2010]大陆争霸 思路: dijkstra模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn ...

  8. bzoj1922 [SDOI2010]大陆争霸 分层图

    问题描述 幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...

  9. Dijkstra【P2446】 [SDOI2010]大陆争霸

    Background 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉泽,而克里斯国信仰象征光明和永 ...

随机推荐

  1. SpringBoot 2.0.3 源码解析

    前言 用SpringBoot也有很长一段时间了,一直是底层使用者,没有研究过其到底是怎么运行的,借此机会今天试着将源码读一下,在此记录...我这里使用的SpringBoot 版本是  2.0.3.RE ...

  2. 9.22考试 crf的数数 题解

    这道题当时第一反应是线段树,但没有继续想,因为当时打完第一题打算这道题和第二道题并列做,打完第二道题状压后时间还有两个小时多,先打完暴力再说,打完之后又接着去想,然后想了5分多钟吧,扑街. 然后就发现 ...

  3. shell_chmod与目录权限

    此篇文档将讲解关于linux中文件权限常用命令chmod.为了达到一个比较好的效果,我会在需要的地方实际上机验证测试,并截图给朋友们看.我的linux机器装的是(opensuse-11.3),并且以文 ...

  4. MyBatis简单使用方式总结

    MyBatis简单使用方式总结 三个部分来理解: 1.对MyBatis的配置部分 2.实体类与映射文件部分 3.使用部分 对MyBatis的配置部分: 1.配置用log4J显式日志 2.导入包的别名 ...

  5. Sublime Text 3 实现C++代码的编译和运行

    在数据结构代码的编写中,我选用了优秀的编辑器 Sublime Text 3,但是在实现C++代码的编译和运行上费了一番周折,接下来我贴出 C++ 编译系统的代码,供各位参考. 编译后是在弹出的CMD命 ...

  6. LeetCode第2题

    // 给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.//// 如果,我们将这两个数相加起来,则会返回一个新的链表 ...

  7. laravel5.6 使用迁移创建表

    laravel 使用迁移创建表 创建迁移文件 --table 和 --create 选项可以用于指定表名以及该迁移是否要创建一个新的数据表.这些选项只需要简单放在上述迁移命令后面并指定表名: php ...

  8. 一文彻底搞懂Java中的环境变量

    一文搞懂Java环境变量 记得刚接触Java,第一件事就是配环境变量,作为一个初学者,只知道环境变量怎样配,在加上各种IDE使我们能方便的开发,而忽略了其本质的东西,只知其然不知其所以然,随着不断的深 ...

  9. Kotlin学习快速入门(3)——类 继承 接口

    类 参考链接 类定义格式 使用class关键字定义,格式如下: class T{ //属性 //构造函数 //函数 //内部类 } Java Bean类 java bean类 //java bean类 ...

  10. jsp数据交互(一).2

    01.什么是JSP内置对象(jsp核心)? Java 内置对象 Java  作用域 解析:jsp内置对象是web容器创建的一组对象.我们都知道tomcat这款软件可以看成是一种web容器,所以我们可以 ...