zoukankan      html  css  js  c++  java
  • luogu P3238 [HNOI2014]道路堵塞

    代码:

    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<deque>
    #include<queue>
    
    using namespace std;
    
    deque <int> q;
    priority_queue <pair<int,int> > Q;
    const int N=1000009,INF=1<<30;
    int n,m,L,dis[N],inq[N],x[N],y[N],z[N],l[N],cnt,del[N],head[N],D[N],rev[N];
    struct Edge
    {
    	int nxt,to,w;
    }g[N*2];
    
    void add(int from,int to,int w)
    {
    	g[++cnt].nxt=head[from];
    	g[cnt].to=to;
    	g[cnt].w=w;
    	head[from]=cnt;
    }
    
    void SPFA(int S)
    {
    	q.push_front(S);
    	while(!q.empty())
    	{
    		int x=q.front();q.pop_front();
    		inq[x]=0;
    		for (int i=head[x];i;i=g[i].nxt)
    		{
    			int v=g[i].to;
    			if(dis[v]<=dis[x]+g[i].w||del[i])
    				continue;
    			dis[v]=dis[x]+g[i].w;
    			if(!inq[v])
    			{
    				inq[v]=1;
    				if(!q.empty()&&dis[q.front()]>=dis[v])
    					q.push_front(v);
    				else
    					q.push_back(v);
    			}
    			if(D[v]!=0||v==n)
    				Q.push(make_pair(-(dis[v]+D[v]),v));
    		}
    	}
    }
    
    void init()
    {
    	scanf("%d %d %d",&n,&m,&L);
    	for (int i=1;i<=m;i++)
    		scanf("%d %d %d",&x[i],&y[i],&z[i]),add(x[i],y[i],z[i]);
    	for (int i=1;i<=L;i++)
    		scanf("%d",&l[i]),del[l[i]]=1,rev[x[l[i]]]=i;
    	rev[n]=INF;
    	for (int i=L;i>=1;i--)
    		D[x[l[i]]]=D[y[l[i]]]+z[l[i]];
    }
    
    void work()
    {
    	for (int i=1;i<=n;i++)
    		dis[i]=INF;
    	dis[1]=0;
    	SPFA(1);
    	printf("%d
    ",Q.empty()?-1:-Q.top().first);
    	for (int i=1;i<L;i++)
    	{
    		del[l[i]]=0;
    		SPFA(x[l[i]]);
    		while(!Q.empty()&&rev[Q.top().second]<=i+1)
    			Q.pop();
    		printf("%d
    ",Q.empty()?-1:-Q.top().first);
    	}
    }
    
    int main()
    {
    	init();
    	work();
    	return 0;
    }
    
    由于博主比较菜,所以有很多东西待学习,大部分文章会持续更新,另外如果有出错或者不周之处,欢迎大家在评论中指出!
  • 相关阅读:
    Innodb存储引擎
    Innodb学习之MySQL体系结构
    C# sql查询数据库返回单个值方法
    Welcome To SWPUNC-ACM
    P2184 贪婪大陆 题解
    线上Java调优-Arthas入门
    JVM调优学习笔记
    RabbitMQ博文收藏
    System.Net.WebException: 远程服务器返回错误: (405) 不允许的方法。
    随机过程-Brown运动
  • 原文地址:https://www.cnblogs.com/With-penguin/p/12839141.html
Copyright © 2011-2022 走看看