P4779
蒟蒻本人我,已经死磕2天,不知有何细枝末节的错误。小人不才,敬请各位神犇、大佬看看我代码,不胜感激:
#include<bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 1, MAXN = 1e5 + 1;
int cnt, head[MAXN];
struct EDGE
{
int next;
int to;
int wt;
}edge[MAXN];
void addEdge(int u, int v, int wt)
{
++cnt;
edge[cnt].next = head[u];
edge[cnt].to = v;
edge[cnt].wt = wt;
head[u] = cnt;
}
struct NODE
{
int dis;
int id;
bool operator <(const NODE &x) const
{
return x.dis < dis;
}
};
bool vis[MAXN], dis[MAXN];
int main()
{
int n, m, s;
cin>>n>>m>>s;
for(int i = 1; i <= n; ++i)dis[i] = INF;
for(int i = 0; i < m; ++i)
{
int u, v, wt;
cin>>u>>v>>wt;
addEdge(u, v, wt);
}
priority_queue<NODE> que;
que.push(NODE{0, s});
dis[s] = 0;
while(!que.empty())
{
NODE u = que.top();
que.pop();
if(vis[u.id])continue;
vis[u.id] = true;
int size = que.size();
for(int i = head[u.id]; i; i = edge[i].next)
{
cout<<"#"<<i<<" ";
if(!vis[i])continue;
if(dis[edge[i].to] > dis[u.id] + edge[i].wt)
{
cout<<"使用"<<i<<"对"<<edge[i].to<<"进行松弛\n";
dis[edge[i].to] = dis[u.id] + edge[i].wt;
if(!vis[edge[i].to])
{
que.push(NODE{dis[edge[i].to], edge[i].to});
}
}
}
}
for(int i = 1; i <= n; ++i)
{
cout<<dis[i]<<" ";
}
}