题解 [SDOI2010] 大陆争霸
解析
这题似乎不是那么难啊
首先,显而易见,
如果要摧毁一个城市,必须要满足两个条件:
- 机器人摧毁了保护它的城市.
- 机器人到达了这个城市.
而这两个条件可以同时进行(毕竟有无数机器人)
那么显然,我们只需要在上面的条件的时间取\(max\)就行了.
具体来说,我们可以魔改dijkstra,
设\(d1[i]\)是到达\(i\)的时间,\(d2[i]\)是摧毁保护\(i\)的所有城市的时间,
对于保护\(j\)的城市\(i\),从\(i\)到\(j\)连边(新建一张图),就可以更新\(d2\)了.
只要城市被摧毁,就将它放到堆里面就行了.
具体看代码吧:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#define fre(x) freopen(x".in","r",stdin),freopen(x".out","w",stdout)
using namespace std;
inline int read(){
int sum=0,f=1;char ch=getchar();
while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0' && ch<='9'){sum=sum*10+ch-'0';ch=getchar();}
return f*sum;
}
const int N=100001;
struct edge{int to,next,w;}e[N<<1],E[N<<1];
int n,m;
int head[N],Head[N],cnt,Cnt;
int d1[N],d2[N],s[N],v[N];
priority_queue < pair<int,int> > que;
inline void add(int x,int y,int w){
e[++cnt]=(edge){head[x],y,w};head[x]=cnt;
}
inline void Add(int x,int y,int w){
E[++Cnt]=(edge){Head[x],y,w};Head[x]=Cnt;
}
inline void dij(){
memset(d1,0x3f,sizeof(d1));d1[1]=0;
que.push(make_pair(0,1));
while(!que.empty()){
int x=que.top().second,d=-que.top().first;que.pop();
if(max(d1[x],d2[x])!=d) continue;
if(v[x]) continue;v[x]=1;
for(int i=head[x];i;i=e[i].to){
int k=e[i].next;
if(d1[k]<=d+e[i].w) continue;
d1[k]=d+e[i].w;
if(!s[k]) que.push(make_pair(-max(d1[k],d2[k]),k));
}
for(int i=Head[x];i;i=E[i].to){
int k=E[i].next;
s[k]--;d2[k]=max(d2[k],d);
if(!s[k]) que.push(make_pair(-max(d1[k],d2[k]),k));
}
}
// for(int i=1;i<=n;i++) printf("d1[%d]=%d d2[%d]=%d\n",i,d1[i],i,d2[i]);
}
int main(){
n=read();m=read();
for(int i=1;i<=m;i++){int x=read(),y=read(),w=read();add(x,y,w);}
for(int i=1;i<=n;i++){
s[i]=read();
for(int j=1;j<=s[i];j++){int x=read();Add(x,i,0);}
}
dij();
printf("%d\n",max(d1[n],d2[n]));
return 0;
}
题解 [SDOI2010] 大陆争霸的更多相关文章
- 洛谷 P2446 [SDOI2010]大陆争霸 解题报告
P2446 [SDOI2010]大陆争霸 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉 ...
- AC日记——[SDOI2010]大陆争霸 洛谷 P3690
[SDOI2010]大陆争霸 思路: dijkstra模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn ...
- bzoj1922 [SDOI2010]大陆争霸 分层图
问题描述 幻想历8012年5月12日深夜,斯普林·布拉泽降下神谕:“Trust me, earn eternal life.”克里斯军团士气大增.作为克里斯军团的主帅,你决定利用这一机会发动奇袭,一举 ...
- BZOJ1922 [Sdoi2010]大陆争霸 【最短路】
题目 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光明和永恒的神斯普林 ...
- BZOJ1922 [Sdoi2010]大陆争霸
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- bzoj 1922 [Sdoi2010]大陆争霸(最短路变形)
Description 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光 ...
- BZOJ1922:[SDOI2010]大陆争霸(最短路)
Description 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光 ...
- Dijkstra【P2446】 [SDOI2010]大陆争霸
Background 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉泽,而克里斯国信仰象征光明和永 ...
- 【BZOJ1922】[Sdoi2010]大陆争霸 Dijkstra
Description 具体地说,杰森国有 N 个城市,由 M条单向道 路连接.神谕镇是城市 1而杰森国的首都是城市 N.你只需摧毁位于杰森国首都 的曾·布拉泽大神殿,杰森国的信仰,军队还有一切就都会 ...
随机推荐
- 使用pycharm开发web——django2.1.5(二)创建一个app并做一些配置
这里我学习的呢是刘江老师的站,主要原因在于他这个版本新,还比较细节 网址先留一手,约等于在引用http://www.liujiangblog.com/ 开始正题: 1.在pycharm界面终端命令行里 ...
- cmake 简单build和删除
mkdir build cd build cmake .. make
- 题目12 打印1到最大的n位数
///////////////////////////////////////////////////////////////////////////////////// // 2.打印1到最大的n位 ...
- kube-dns和coreDNS的使用
内部服务发现 前面我们给大家讲解了 Service 的用法,我们可以通过 Service 生成的 ClusterIP(VIP)来访问 Pod 提供的服务,但是在使用的时候还有一个问题:我们怎么知道某个 ...
- MyEclipse的Server标签出现:Could not create the view: An unexpected exception was thrown
删除工作空间下的.metadata\.plugins\org.eclipse.core.runtime\.settings\com.genuitec.eclipse.ast.deploy.core.p ...
- 记一次邮件推送的坑,c#基于smtp使用腾讯企业邮箱发送邮件总是失败的原因
今天在弄企业邮箱推送的东西,原版代码是这样的 public void SendEmail(string title, string content) { try { MailMessage mailM ...
- C#中DateTime.Ticks
DateTime.Ticks:表示0001 年 1 月 1 日午夜 12:00:00 以来所经历的 100 纳秒数,即Ticks的属性为100纳秒(1Ticks = 0.0001毫秒). Unix时间 ...
- LeetCode 腾讯精选50题--子集
根据题意,找到几何中的所有子集,说实话子集是没有什么头绪的,因为如果采用遍历的方法,稍有遗漏不说,代码的嵌套循环层数随着数组大小的增加而增加,想了很久没有头绪后就去看了看评论,然后就被点破了解题的关键 ...
- html与css注意事项及小知识点
html 常用的html特殊符号: 空格:&npsd: 版权所有符号:©: 注册商标符号:®: 有两个标签容器:<span>和<div> ...
- weblogic 反序列化漏洞 getshell
上传cmd.jsp,效果: 上传马: