bzoj:1922: [Sdoi2010]大陆争霸 (luogu 2446)
算法:最短路变形
难度:NOIP+
dijkstra模板啊啊啊
最短路的变形题,到第x个城市的最早时间= max(到第x个城市的最早时间,到结界发生器所在城市的最晚时间),如果此城市未解锁就不可以推进队列,枚举这个城市所拥有的结界发生器(关闭装置),然后--,即可;
代码如下:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <cmath>
#define ll long long
#define N 70005
using namespace std;
int head[N],dis[N];
struct node
{int to;int next;int val;
}edge[N];
int cnt=1;
void init()
{memset(head,-1,sizeof(head));cnt=1;
}
void add(int u,int v,int w)
{edge[cnt].next=head[u];edge[cnt].to=v;edge[cnt].val=w;head[u]=cnt++;
}
int stat[3005][3005];
int ned[3005];
struct no
{int d;int po;
};
priority_queue<no>Q;
bool operator < (no x,no y)
{return x.d>y.d;
}
int vis[N];
ll tim[3005];
ll maxn;
void diji(int rt)
{memset(dis,0x3f3f3f3f,sizeof(dis));dis[rt]=0;no temp;temp.d=0;temp.po=rt;Q.push(temp);while(!Q.empty()){no te=Q.top();Q.pop();int u=te.po;if(vis[u]) continue;vis[u]=1;maxn=max(1ll*dis[u],tim[u]);no nt;for(int i = head[u];i!=-1;i=edge[i].next){int to=edge[i].to;if(vis[to]) continue;//vis[to]=1;刚刚把dijkstra最短路模板敲错了,没有这句话!!!if(dis[to]>maxn+edge[i].val){dis[to]=maxn+edge[i].val;if(!ned[to]){nt.d=max(1ll*dis[to],tim[to]);nt.po=to;Q.push(nt);}}}for(int i = 1;i <= stat[u][0];i++){int t=stat[u][i];tim[t]=max(tim[t],maxn);ned[t]--;if(!ned[t]){nt.d=max(1ll*dis[t],tim[t]);nt.po=t;Q.push(nt);} } }
}
int main()
{init();int n,m;scanf("%d%d",&n,&m);for(int i = 1;i <= m;i++){int x,y,w;scanf("%d%d%d",&x,&y,&w);add(x,y,w);}for(int i = 1;i <= n;i++){int tt;scanf("%d",&tt);if(tt){ned[i]=tt;for(int j = 1;j <= tt;j++){int x;scanf("%d",&x);int ctt=++stat[x][0];stat[x][ctt]=i;}}}/*for(int i = 1;i <= 5;i++){for(int j = 1;j <= 5;j++){cout << stat[i][j] << " ";}puts("");}*/diji(1);printf("%lld\n",max(1ll*dis[n],tim[n]));return 0 ;
}
bzoj:1922: [Sdoi2010]大陆争霸 (luogu 2446)相关推荐
- [Bzoj 1922] [SDOI2010] 大陆争霸
1922: [Sdoi2010]大陆争霸 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 2274 Solved: 1025 [Submit][Sta ...
- BZOJ 1922: [Sdoi2010]大陆争霸
Description 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的 克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭 的神曾·布拉泽,而克里斯国信仰象征光 ...
- AC日记——[SDOI2010]大陆争霸 洛谷 P3690
[SDOI2010]大陆争霸 思路: dijkstra模板: 代码: #include <bits/stdc++.h> using namespace std; #define maxn ...
- P2446 [SDOI2010]大陆争霸
P2446 [SDOI2010]大陆争霸 题意: n个点,m个边,wi为每个边的边权,对于每个点i,其被l个点保护着,也就是如果保护其的点没有被破坏,点i无法被破坏(也无法经过其前往其他点).现在从1 ...
- BZOJ1922: [Sdoi2010]大陆争霸
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1922 带限制最短路. 每个点真正的dis是max(dis[i],dis[v]),v是其保护点. ...
- B1922 [Sdoi2010]大陆争霸 最短路
我一直都不会dij的堆优化,今天搞了一下...就是先弄一个优先队列,存每个点的数据,然后这个题就加了一点不一样的东西,每次的最短路算两次,一次是自己的最短路,另一次是机关的最短路,两者取最大值才是该点 ...
- BZOJ1922 SDOI2010 大陆争霸 最短路
题意:给定一个图,图中有保护关系(u,v)表示到v之前必须先到一次u,求从1到N的最短路 题解: 定义d1[i]为直接到达i的最短距离,这个的更新和普通的Dijkstra一样 定义d2[i]为解除i的 ...
- BZOJ-1922 大陆争霸 多限制、分层图最短路 (堆+dijkstra)
1922: [Sdoi2010]大陆争霸 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1154 Solved: 478 [Submit][Status ...
- [Luogu P2447] [BZOJ 1923] [SDOI2010]外星千足虫
洛谷传送门 BZOJ传送门 航空航天局(NASA)研制发射,行经火星.金星.土卫六.木卫二.谷神星."张衡星"等232323颗太阳系星球,并最终在小行星"杰森星" ...
- BZOJ 1923: [Sdoi2010]外星千足虫
1923: [Sdoi2010]外星千足虫 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 921 Solved: 592 [Submit][Stat ...
最新文章
- DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)
- 安卓手机使用前置摄像头
- 再把鼻子涂黑的飞鸽沟通最简单
- css 3d魔方源代码,CSS3 3D环境实现立体 魔方效果代码(示例代码)
- 【证明】—— 二叉树的相关证明
- HttpServlet使用@WebServlet注解
- java 反射机制及其应用
- spring实现mqtt服务端_SpringBoot--实战开发--MQTT消息推送(六十)
- Android中解析XML的方法
- 10月11 小结: 你又贪玩了不是?
- django mysql socket_django mysql 读写分离
- loacallhost:80被占用解决方法
- 川师c语言实验报告9,川师c语言实验报告十.doc
- 颠覆Web前端开发的HTML5技术
- C++中toupper、tolower 、isalpha、isalnum、isdigit、islower、isupper、isblank、isspace的用法
- java做 binggo,CONTRIBUTING.md
- php 处理eml,php读取eml范例、php解析eml、eml解析成网页
- libmp4v2的编译及简单DEMO
- [Xilinx FPGA] #4 Xilinx FPGA 芯片命名规则与查询方法
- Linux内存memtest,详细讲解 Linux极品内存检测软件 Memtest86