洛谷 U80415 懒懒的Seaway

洛谷 U80415 懒懒的Seaway

题目传送门

题目背景

经过不懈的努力,FSW终于溜出了机房,找到了他的女朋友...他们一起去了儿童公园...但是问题又来了!儿童公园有很多好玩的景点,而且路线极其的复杂!!最可怕的是,FSW和她的女朋友都是大路痴qwq。所以,需要你来帮忙...

题目描述

FSW怀着忐忑的心情打开了儿童公园的地图,他发现儿童公园一共有N个景点,有M条链接不同景点的路。最让FSW惊奇的是,地图上还贴心地标出了每个景点的“趣味值”W_i和每条路的长度D_i。这令FSW窃喜,因为他懒得要命,根本不想在这个幼儿公园里浪费太多的时间,他准备直接去玩趣味值最大的景点,然后直接带着女朋友离开。现在,他请你帮忙找出,从公园大门(定义为景点1)到趣味值最大的景点再回到大门时,FSW和他的女朋友需要走的最短的路径长度。当然,如果无法到达趣味值最大的景点,FSW会去趣味值稍小一点的景点...数据保证FSW一定会有可以去的景点。

输入格式

第一行包括两个整数N,M。 接下来的1行,共N个数,代表N个景点的趣味值W_i,输入保证大门的趣味值为0。 接下来的M行,每行3个数u,v,d,代表点u,v之间有一条距离为d的路。

输出格式

输出包括2行。 第一行一个整数S代表FSW带着女朋友去到的景点编号。 第二行一个整数P代表FSW和女朋友一共走的距离。

输入输出样例

输入 #1复制

输出 #1复制

说明/提示

数据范围: 2<=N<=200 1<=M<=4000 0<=W_i,D_i<=1000

这也是自己出的题,算是T2吧吼吼吼。

一道图论的题,再难了我就不会了。

出数据点很困难,但保证数据特别卡人。

唯一加入的坑点可以算是结构体排序,其他的没什么太难的。

直接上代码吧:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int n,m;
int tot,to[8002],val[8002],nxt[8002],head[201];
int dist[201],v[201];
struct node
{
    int id,d;
}a[201];
void add(int x,int y,int z)
{
    to[++tot]=y;
    val[tot]=z;
    nxt[tot]=head[x];
    head[x]=tot;
}
bool cmp(node a,node b)
{
    return a.d>b.d;
}
void spfa()
{
    memset(dist,0x3f,sizeof(dist));
    memset(v,0,sizeof(v));
    queue<int> q;
    q.push(1);
    v[1]=1;
    dist[1]=0;
    while(!q.empty())
    {
        int x=q.front();
        q.pop();
        v[x]=0;
        for(int i=head[x];i;i=nxt[i])
        {
            int y=to[i];
            if(dist[y]>dist[x]+val[i])
            {
                dist[y]=dist[x]+val[i];
                if(v[y]==0)
                    q.push(y),v[y]=1;
            }
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i].d);
        a[i].id=i;
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=m;i++)
    {
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        add(x,y,z);
        add(y,x,z);
    }
    spfa();
    for(int i=1;i<=n;i++)
    {
        int aid=a[i].id;
        if(dist[aid]<1e9)
        {
            printf("%d\n%d",aid,dist[aid]*2);
            return 0;
        }
    }
}

猜你喜欢

转载自www.cnblogs.com/fusiwei/p/11275738.html