标签:get priority getc line stream memset ace continue back
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <bits/stdc++.h>
using namespace std;
const int N = 10010;
const int oo = 99999999;
int dis[N], pre[N];
bool vis[N];
int n, m, S;
struct Node{
int u, v, w;
Node(int u, int v, int w):u(u), v(v), w(w) {}
};
struct Headnode{
int dis_this, u;
bool operator < (const Headnode& now) const
{
return dis_this > now.dis_this;
}
};
vector <int> G[N];
vector <Node> EE;
inline int read()
{
int x = 0; char c = getchar();
while(c < ‘0‘ || c > ‘9‘)c = getchar();
while(c >= ‘0‘ && c <= ‘9‘)x = x * 10 + c - ‘0‘, c = getchar();
return x;
}
inline void dijkstra(int start)
{
priority_queue <Headnode> Q;
for(int i = 1; i <= n; i ++)
dis[i] = oo;
dis[start] = 0;
memset(vis, 0, sizeof(vis));
Headnode HHH;
HHH.dis_this = 0;
HHH.u = start;
Q.push(HHH);
while(!Q.empty())
{
Headnode topp = Q.top();
Q.pop();
int u = topp.u;
if(vis[u])
continue;
for(int i = 0; i < G[u].size(); i ++)
{
Node e = EE[G[u][i]];
if(dis[e.v] > dis[u] + e.w)
{
dis[e.v] = dis[u] + e.w;
pre[e.v] = G[u][i];
Q.push((Headnode) {dis[e.v], e.v});
}
}
}
}
inline void add(int u,int v,int w)
{
EE.push_back(Node(u, v, w));
G[u].push_back(EE.size() - 1);
}
int main()
{
n = read();
m = read();
S = 1;
for(int i = 1; i <= m; i ++)
{
int u = read();
int v = read();
int w = read();
add(u, v, w);
}
dijkstra(S);
while(1)
{
int endd = read();
printf("%d",dis[endd]);
}
return 0;
}
/*
5 7
1 2 4
1 3 6
1 5 50
2 3 5
3 5 7
3 4 8
4 5 9
*/
标签:get priority getc line stream memset ace continue back
原文地址:http://www.cnblogs.com/lyqlyq/p/7354165.html