比赛 |
防止浮躁的小练习V0.1 |
评测结果 |
AAAAAAAAA |
题目名称 |
最长路 |
最终得分 |
100 |
用户昵称 |
安呐一条小咸鱼。 |
运行时间 |
0.190 s |
代码语言 |
C++ |
内存使用 |
1.84 MiB |
提交时间 |
2016-10-07 17:40:15 |
显示代码纯文本
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<queue>
#define maxn 50010
using namespace std;
int n,m,a,b,c,head[maxn],tot,dis[maxn];
struct Edge{
int to,next,dis;
}edge[maxn<<1];
struct Node{
int id,dist;
Node(int a=0,int b=0)
{
id=a,dist=b;
}
bool operator <(const Node& x)const
{
return x.dist<dist;
}
};
void Addedge(int x,int y,int z)
{
edge[++tot].to=y;
edge[tot].dis=z;
edge[tot].next=head[x];
head[x]=tot;
}
void Djs(int s)
{
priority_queue<Node> q;
memset(dis,0x7f,sizeof(dis));
dis[s]=0;q.push(Node(s,0));
while(!q.empty())
{
Node node=q.top();q.pop();
s=node.id;
if(dis[s]!=node.dist)continue;
for(int i=head[s];i;i=edge[i].next)
{
int t=edge[i].to;
if(dis[t]>dis[s]+edge[i].dis)
{
dis[t]=dis[s]+edge[i].dis;
q.push(Node(t,dis[t]));
}
}
}
}
int main(){
freopen("longest.in","r",stdin); freopen("longest.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
Addedge(a,b,-c);
}
Djs(1);
// cout<<dis[n]<<endl;
if(dis[n]==0x7f7f7f7f)puts("-1");
else printf("%d\n",-dis[n]);
}