洛谷P2299Mzc和体委的争夺战

来源:互联网 发布:网络投票工具 编辑:程序博客网 时间:2024/05/22 00:12

题目背景

mzc与djn第四弹。

题目描述

mzc家很有钱(开玩笑),他家有n个男家丁(做过前三弹的都知道)。但如此之多的男家丁吸引来了我们的体委(矮胖小伙),他要来与mzc争夺男家丁。

mzc很生气,决定与其决斗,但cat的体力确实有些不稳定,所以他需要你来帮他计算一下最短需要的时间。

输入输出格式

输入格式:

第一行有两个数n,m,n表示有n个停留站,m表示共有m条路。

之后m行,每行三个数a[i],b[i],c[i],表示第a[i]个停留站到第b[i]个停留站需要c[i]的时间。(无向)

输出格式:

一行,输出1到m最短时间。

输入输出样例

输入样例#1:
5 81 2 32 3 43 4 54 5 61 3 42 4 72 5 81 5 100
输出样例#1:
11

说明

n<=2500

m < = 40000000

由于mzc大大十分着急,所以他只能等待1S。





话说我已经很久没有做过最短路问题了。。。

一发弱弱的 spfa 。。。

#include<cstdio>#include<queue>#include<cstring>#include<iostream>#include<algorithm>#define MAX 9999999#define MAXN 20010using namespace std;int n,m,s,t,c=1;int path[MAXN],head[MAXN];bool vis[MAXN];struct node{       int next,to,w;}a[MAXN*200];inline int read(){       int date=0,w=1;char c=0;       while(c!='-'&&(c<'0'||c>'9'))c=getchar();       if(c=='-'){w=-1;c=getchar();}       while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}       return date*w;}inline int relax(int u,int v,int w){       if(path[v]>path[u]+w){                             path[v]=path[u]+w;                             return 1;                             }       return 0;}void add(int u,int v,int w){     a[c].to=v;a[c].w=w;     a[c].next=head[u];     head[u]=c++;     a[c].to=u;a[c].w=w;     a[c].next=head[v];     head[v]=c++;}void spfa(){     int u,v;     queue<int> q;     path[s]=0;     vis[s]=true;     q.push(s);     while(!q.empty()){                       u=q.front();                       vis[u]=false;                       q.pop();                       for(int i=head[u];i;i=a[i].next){                               v=a[i].to;                               if(relax(u,v,a[i].w)&&!vis[v]){                                                              vis[v]=true;                                                              q.push(v);                                                              }                               }                       }     printf("%d\n",path[t]==MAX?-1:path[t]);}int main(){    int u,v,w;    memset(vis,false,sizeof(vis));    memset(path,MAX,sizeof(path));    n=read();m=read();    for(int i=1;i<=m;i++){            u=read();v=read();w=read();            add(u,v,w);            }    s=1;    t=n;    spfa();    return 0;}


原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 美图手机突然音量小怎么办 苹果六手机反应慢怎么办 美图t8开机慢怎么办 美图m6s拍照模糊怎么办 8848m4密码忘了怎么办 美图手机m4自拍黑屏怎么办 美图m4相机黑屏怎么办 美图m4手机拍照黑屏怎么办 美图m4拍照黑屏怎么办 美图m4很卡怎么办 美图m8工厂模式怎么办 美图m6开不了机怎么办 美图m8开不开机怎么办 美图摄像头坏了怎么办 美图t8相机模糊怎么办 美图m4卡槽坏了怎么办 美图t8手机好卡怎么办 美图手机m6卡怎么办 美图t8屏幕不亮怎么办 美图m8卡机了怎么办 美图m6手机太卡怎么办 美图t8闪退怎么办 美图手机相机闪退怎么办 美图手机闪屏怎么办 魅族m6相册闪退怎么办 美图m6工厂模式怎么办 美图m6手机死机怎么办 美图m6s开不了机怎么办 美图手机m6进水怎么办 美图t8摔黑屏怎么办 美图屏幕点不动怎么办 朗动钥匙丢了怎么办 深圳小汽车摇号中签了怎么办 深圳摇号审核通过后怎么办 京东过保修期了怎么办 买的商业预付卡怎么办 壹钱包预付卡金额不足怎么办 美发店换老板原来预付卡怎么办 超市预付卡现超市停业怎么办? 利群购物卡丢了怎么办 利群金卡丢了怎么办