题:http://115.236.49.52:83/problem/7511
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
inline void write(int x)
{
if(x<0) putchar('-'),x=-x;
if(x>9) write(x/10);
putchar(x%10+'0');
}
const long long maxn=200005;
struct edge
{
long long v,dis,next;
}e[maxn];
long long head[maxn], dis[maxn], cnt;
bool vis[maxn];
long long n, m, s;
inline void insert(long long u,long long v,long long w)
{
cnt++;
e[cnt].dis=w;
e[cnt].v=v;
e[cnt].next=head[u];
head[u]=cnt;
}
struct node
{
long long dis,pos;
bool operator<( const node &x )const
{
return x.dis<dis;
}
};
priority_queue<node> q;
inline void dijkstra()
{
dis[s]=0;
q.push((node){0,s});
while(!q.empty())
{
node tmp=q.top();
q.pop();
long long x=tmp.pos,d=tmp.dis;
if(vis[x])
{
continue;
}
vis[x]=1;
for(long long i=head[x];i;i=e[i].next)
{
long long y=e[i].v;
if(dis[y]>dis[x]+e[i].dis)
{
dis[y]=dis[x]+e[i].dis;
if(!vis[y])
{
q.push((node){dis[y],y});
}
}
}
}
}
int main()
{
n=read();
m=read();
s=1;
for(long long i=1;i<=n;i++)
{
dis[i]=0x7fffffff;
}
for(long long i=0;i<m;i++)
{
long long u,v,w;
u=read();
v=read();
w=read();
insert(u,v,w);
}
dijkstra();
for(long long i=1;i<=n;i++)
{
write(dis[i]);
putchar(' ');
}
}
题解竟然过不了...但是竟然有人能过