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

题面

BZOJ

洛谷

题解

最短路变形题。

定义\(dis\)表示最短路,\(d\)表示最早可以进入当前点的时间。显然\(d=max(max(dis_v,d_v))\),其中\(v\)有着当前点的结节发生器。

那么Dijkstra跑一遍就好了。

注意一下这题边是单向的。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
#define ll long long
#define MAX 3030
#define MAXL 70070
inline int read()
{
int x=0;bool t=false;char ch=getchar();
while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
if(ch=='-')t=true,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();
return t?-x:x;
}
struct Line{int v,next,w;}e[MAXL<<1];
int h[MAX],cnt=1;
inline void Add(int u,int v,int w){e[cnt]=(Line){v,h[u],w};h[u]=cnt++;}
struct Node{ll dis;int u;};
bool operator<(Node a,Node b){return a.dis>b.dis;}
priority_queue<Node> Q;
int n,m;
ll dis[MAX],d[MAX];int dg[MAX];
vector<int> E[MAX];
bool vis[MAX];
void Dijkstra()
{
Q.push((Node){dis[1]=0,1});
while(!Q.empty())
{
Node x=Q.top();Q.pop();
int u=x.u;ll dd=max(dis[u],d[u]);
if(vis[u])continue;vis[u]=true;
for(int i=h[u];i;i=e[i].next)
{
int v=e[i].v;if(vis[v])continue;
if(dis[v]>dd+e[i].w)
{
dis[v]=dd+e[i].w;
if(!dg[v])Q.push((Node){max(d[v],dis[v]),v});
}
}
for(int i=0,l=E[u].size();i<l;++i)
{
int v=E[u][i];--dg[v];
d[v]=max(d[v],dd);
if(!dg[v])Q.push((Node){max(d[v],dis[v]),v});
}
}
}
int main()
{
n=read(),m=read();
for(int i=1;i<=m;++i)
{
int u=read(),v=read(),w=read();
Add(u,v,w);
}
memset(dis,63,sizeof(dis));
for(int i=1;i<=n;++i)
{
int k=read();dg[i]=k;
while(k--)E[read()].push_back(i);
}
Dijkstra();
printf("%lld\n",max(d[n],dis[n]));
return 0;
}

最新文章

  1. Python 【第十章】 Django路由
  2. APIO2015简要题解
  3. Stm32 debug停留在&quot;BKPT 0xAB&quot;或者&quot;SWI 0xAB&quot;的解决办法。
  4. Linux命令行–初识Linux shell
  5. Using Hooks
  6. 基于Linux的oracle数据库管理 part4( shell管理 上 )
  7. POJ动态规划题目列表
  8. eclipse下的tomcat内存设置大小
  9. 《网络编程》先进 I/O
  10. android UI进阶之用ViewPager实现欢迎引导页面[转]
  11. SDN学习之实现环路通信
  12. Linux Debugging(八): core真的那么难以追踪吗?
  13. SpringBoot中使用JNnit4(入门篇)
  14. eclipse的基本使用和配置
  15. l^oo不可分的两个注意点
  16. 移动端触屏滑动touches使用
  17. mongoose findByIdAndUpdate不执行的解决方法
  18. GCC输出带C源代码的汇编文件
  19. Java知多少(47)多重catch语句的使用
  20. jdk和二进制 常量.变量

热门文章

  1. 最优方向法(MOD)
  2. 工程能力之C4模型
  3. Django_rest_framework_组件(authentication、permission、throttle)
  4. No.10_分数分配
  5. mysql 官方集群
  6. Sprint9
  7. 学习pl/sql之一
  8. ORACLE_SQL
  9. 提交内容到版本库:git commit
  10. caffe with anaconda