P2683 小岛

题目背景

西伯利亚北部的寒地,坐落着由 N 个小岛组成的岛屿群,我们把这些小岛依次编号为 1 到 N 。

题目描述

起初,岛屿之间没有任何的航线。后来随着交通的发展,逐渐出现了一些连通两座小岛的航线。例如增加一条在 u 号小岛与 v 号小岛之间的航线,这条航线的用时为 e。 那么沿着这条航线,u 号小岛上的人可以前往 v 号小岛,同样的 v 号小岛上的人也可以前往 u 号小岛,其中沿着这一条航线花费的时间为 e。

同时,随着旅游业的发展,越来越多的人前来游玩。那么两个小岛之间的最短路径是多少便成为了饱受关注的话题。

输入输出格式

输入格式:

输入共 M+1 行。

第一行有两个整数 N 和 M,分别表示小岛的数与总操作数。

接下来的 M 行,每行表示一个操作,格式如下:

0 s t:表示询问从 s 号小岛到 t 号小岛的最短用时(1<=s<=n, 1<=t<=n, s\neq t)。

1 u v e:表示新增了一条从 u 号小岛到 v 号小岛,用时为 e 的双向航线(1<=u<=n, 1<=v<=n, u ≠ v, 1<=e<=10^6)。

输出格式:

输出针对每一次询问,单独输出一行。

对于每一组询问来说,如果不存在可行的道路,则输出 -1,否则输出最短用时。

输入输出样例

输入样例#1: 复制

3 8
1 3 1 10
0 2 3
1 2 3 20
1 1 2 5
0 3 2
1 1 3 7
1 2 1 9
0 2 3
输出样例#1: 复制

-1
15
12
输入样例#2: 复制

5 16
1 1 2 343750
1 1 3 3343
1 1 4 347392
1 1 5 5497
1 2 3 123394
1 2 4 545492
1 2 5 458
1 3 4 343983
1 3 5 843468
1 4 5 15934
0 2 1
0 4 1
0 3 2
0 4 2
0 4 3
0 5 3
输出样例#2: 复制

5955
21431
9298
16392
24774
8840

说明

对于20%的数据,N<=5且M<=30。

对于40%的数据,N<=20且M<=200。

对于60%的数据,N<=80且M<=500。

对于80%的数据,N<=100且M<=2500。

对于100%的数据,N<=100且M<=5000。

spfa求最短路、、、(竟然没有TLE?!太神奇了、、、)

#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 100010
#define maxn 99999999
using namespace std;
bool vis[N];
queue<int>q;
int p,n,m,x,y,z,s,e,t,tot;
][];
int read()
{
    ,f=; char ch=getchar();
    ;ch=getchar();}
    +ch-',ch=getchar();
    return x*f;
}
struct Edge
{
    int to,next;
}edge[N];
int add(int x,int y)
{
    tot++;
    edge[tot].to=y;
    edge[tot].next=head[x];
    head[x]=tot;
}
int spfa(int s)
{
    while(!q.empty()) q.pop();
    ;i<=n;i++) vis[i]=,dis[i]=maxn;
    vis[s]=;
    /*while(!q.empty())
    {
        x=q.front();q.pop();vis[x]=false;
        for(int i=head[x];i;i=edge[i].next)
        {
            int t=edge[i].to;
            if(dis[t]>dis[x]+f[x][t])
            {
                dis[t]=dis[x]+f[x][t];
                if(!vis[t]) vis[t]=true,q.push(t);
            }
        }
    }*/
    while(!q.empty())
    {
        x=q.front();q.pop();vis[x]=false;
        ;i<=n;i++)
        {
            int t=i;
            if(dis[t]>dis[x]+f[x][t])
            {
                dis[t]=dis[x]+f[x][t];
                if(!vis[t]) vis[t]=true,q.push(t);
            }
        }
    }
}
int main()
{
    n=read(),m=read();
    ;i<=n;i++)
     ;j<=n;j++)
      f[i][j]=(i!=j)*maxn;
    while(m--)
    {
        p=read();
        )
        {
            x=read(),y=read(),z=read();
            //if(f[x][y]) f[x][y]=f[y][x]=min(f[x][y],z);
            //else f[x][y]=f[y][x]=z,add(x,y),add(y,x);
            f[x][y]=f[y][x]=min(f[x][y],z);
        }
        else
        {
            s=read(),e=read();
            spfa(s);
            if(dis[e]>=maxn) printf("-1\n");
            else printf("%d\n",dis[e]);
        }
    }
    ;
}

洛谷——P2683 小岛的更多相关文章

  1. 洛谷 P2683 小岛

    P2683 小岛 题目背景 西伯利亚北部的寒地,坐落着由 N 个小岛组成的岛屿群,我们把这些小岛依次编号为 1 到 N . 题目描述 起初,岛屿之间没有任何的航线.后来随着交通的发展,逐渐出现了一些连 ...

  2. 洛谷P1000超级马里奥的神奇解法

    话说上过洛谷的都知道,有一道经典例题P1000超级马里奥,这一题,可以说是非常简单非常经典,但是就算如此,还是可以人才辈出,我是个比较循规蹈矩的人(雾),所以我的代码就比较平常,也就是直接输出了所要求 ...

  3. bzoj1407,洛谷2421 NOI2002荒岛野人

    题目大意: 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,-,M.岛上住着N个野人,一开始依次住在山洞C1,C2,-,CN中,以后每年,第i个野人会沿顺时针向前走P ...

  4. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  5. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

  6. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  7. 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP

    题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...

  8. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  9. 洛谷P1371 NOI元丹

    P1371 NOI元丹 71通过 394提交 题目提供者洛谷OnlineJudge 标签云端评测 难度普及/提高- 提交  讨论  题解 最新讨论 我觉得不需要讨论O long long 不够 没有取 ...

随机推荐

  1. Counting Pair

    Counting Pair Time Limit: 1000 ms Memory Limit: 65535 kB Solved: 112 Tried: 1209 Submit Status Best ...

  2. 使用asp.net改变图片颜色

    最近奇葩经理提出了奇葩的需求,要能在网站上改变图片的颜色,比如灰色的变成彩色,彩色的变成灰色,尼玛楼主的感受你们不懂!于是有了下面的代码... 用法:调用update_pixelColor方法并传参数 ...

  3. Lua的各种资源1

    Libraries And Bindings     LuaDirectory > LuaAddons > LibrariesAndBindings This is a list of l ...

  4. iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2014年2月19日更新版)

    //转载请注明出处--本文永久链接:http://www.cnblogs.com/ChenYilong/p/3496069.html     编号 iOS-Apple苹果官方文档翻译名称 博文链接地址 ...

  5. CodeForces 869B

    Even if the world is full of counterfeits, I still regard it as wonderful. Pile up herbs and incense ...

  6. Sublime之插件的安装(一)

    由于最近刚换了一个工作,所以决定重新申请一个blog,把工作当中遇到的一些问题记录下来,方便自己下次忘记,也希望能与一起需要的小伙伴一起共勉. 如果有不同的观点或者是不同的看法,大家都可以畅谈,我一直 ...

  7. php常用代码段

    点击换验证码 <a href=" src="{:U('Reglog/vcode')}" /></a> TP上一条下一条 $prev=$artica ...

  8. 商城项目(ssm+dubbo+nginx+mysql统合项目)总结(2)

    我不会在这里贴代码和详细步骤什么的,我觉得就算我把它贴出来,你们照着步骤做还是会出很多问题,我推荐你们去看一下黑马的这个视频,我个人感觉很不错,一步一步走下来可以学到很多东西.另外,视频和相关文档的话 ...

  9. mysql 提权总结

    1.MOF提权 简单的说mof就是系统内部的一个程序,每隔一定时间系统就会以root权限去执行,我们将其替换然后执行我们的而已攻击代码.此举称之为mof提权. 以下便是脚本: #pragma name ...

  10. skb_reserve(skb,2)中的2的意义

    skb_reserve() skb_reserve()在数据缓存区头部预留一定的空间,通常被用来在数据缓存区中插入协议首部或者在某个边界上对齐.它并没有把数据移出或移入数据缓存区,而只是简单地更新了数 ...