码迷,mamicode.com
首页 > 其他好文 > 详细

BZOJ 1922--大陆争霸(最短路)

时间:2017-10-28 22:03:45      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:dijkstra   tar   最短路   zoj   insert   main   air   题目   jks   

    看起来很难的最短路。。。。

题目链接:

    http://www.lydsy.com/JudgeOnline/problem.php?id=1922 

Solution

    如果要要进入某个城市,首先要进入几个特定的点。。。

    于是进入某个城市的时间就是到达该城市进入其他特定城市的时间的最大值。。。

    于是跑一遍最短路就好了。。。。

代码

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int INF=0x3f3f3f3f;
int n,m;
int d[3010],d1[3010],d2[3010],l[3010];
int a[3010][3010];
bool vis[3010];
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
struct edge{
    int v,next,w;
}e[70010];
int cnt,head[3010];
void insert(int u,int v,int w){
    e[++cnt].v=v;
    e[cnt].next=head[u];
    e[cnt].w=w;
    head[u]=cnt;
}
void dijkstra(){
    memset(d1,0x3f,sizeof(d1));
    q.push(make_pair(0,1));
    d1[1]=0;
    while(!q.empty()){
        int now=q.top().second;
        q.pop();
        if(vis[now]) continue;
        vis[now]=1;
        int mx=max(d1[now],d2[now]);    
        for(int i=head[now];i;i=e[i].next)
            if(mx+e[i].w<d1[e[i].v]){
                d1[e[i].v]=mx+e[i].w;
                int tmp=max(d1[e[i].v],d2[e[i].v]);
                if(!d[e[i].v]) q.push(make_pair(tmp,e[i].v));
            }
        for(int i=1;i<=l[now];i++){
            int t=a[now][i];
            d[t]--;
            d2[t]=max(d2[t],mx);
            int tmp=max(d1[t],d2[t]);
            if(!d[t]) q.push(make_pair(tmp,t));
        }
    }
    printf("%d\n",max(d1[n],d2[n]));
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++){
        int u,v,w;
        scanf("%d%d%d",&u,&v,&w);
        if(u!=v) insert(u,v,w);
    }
    for(int i=1;i<=n;i++){
        scanf("%d",&d[i]);
        for(int j=1;j<=d[i];j++){
            int u;
            scanf("%d",&u);
            a[u][++l[u]]=i;
        }
    }
    dijkstra();
    return 0;
}

  

  

This passage is made by Iscream-2001.

 

BZOJ 1922--大陆争霸(最短路)

标签:dijkstra   tar   最短路   zoj   insert   main   air   题目   jks   

原文地址:http://www.cnblogs.com/Yuigahama/p/7748046.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!