'commit'
This commit is contained in:
58
TangDou/MiniPath/Dijkstra3.cpp
Normal file
58
TangDou/MiniPath/Dijkstra3.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include <bits/stdc++.h>
|
||||
|
||||
using namespace std;
|
||||
typedef pair<int, int> PII;
|
||||
struct Node {
|
||||
int var, next, val;
|
||||
} edge[100000005];
|
||||
int head[100005], tot, dis[100005], N, M;
|
||||
bool vis[100005];
|
||||
priority_queue<PII> Q;
|
||||
|
||||
void add(int a, int b, int c) {
|
||||
edge[++tot].var = b;
|
||||
edge[tot].val = c;
|
||||
edge[tot].next = head[a];
|
||||
head[a] = tot;
|
||||
}
|
||||
|
||||
void init()//多组输入调用
|
||||
{
|
||||
tot = 0;
|
||||
memset(head, 0, sizeof(head));
|
||||
}
|
||||
|
||||
void dijkstra(int s) {
|
||||
memset(dis, 0x3f, sizeof(dis));
|
||||
//memset(vis,0,sizeof(vis));
|
||||
//while(Q.size()) Q.pop();
|
||||
dis[s] = 0;
|
||||
Q.push(make_pair(0, s));
|
||||
while (!Q.empty()) {
|
||||
int x = Q.top().second;
|
||||
Q.pop();
|
||||
if (vis[x])continue;
|
||||
vis[x] = 1;
|
||||
for (int i = head[x]; i; i = edge[i].next) {
|
||||
int y = edge[i].var;
|
||||
if (dis[x] + edge[i].val < dis[y]) {
|
||||
dis[y] = dis[x] + edge[i].val;
|
||||
if (!vis[y])
|
||||
Q.push(make_pair(-dis[y], y));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
int S;
|
||||
scanf("%d %d %d", &N, &M, &S);
|
||||
while (M--) {
|
||||
int x, y, z;
|
||||
scanf("%d %d %d", &x, &y, &z);
|
||||
add(x, y, z);
|
||||
}
|
||||
dijkstra(S);
|
||||
for (int i = 1; i <= N; i++)printf("%d ", dis[i]);
|
||||
}
|
||||
Reference in New Issue
Block a user