记录编号 |
98366 |
评测结果 |
AAAAAAAA |
题目名称 |
服务点设置 |
最终得分 |
100 |
用户昵称 |
FF_Sky||幻 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.007 s |
提交时间 |
2014-04-22 19:58:25 |
内存使用 |
0.57 MiB |
显示代码纯文本
#include <cstdio>
#include <cstring>
#define INF 0x3f3f3f3f
#define N 100
#define M 21000
using namespace std;
int w[N][N],ver[M],next[M],head[M],h[N],d[N],c[N],n,m,tot,p;
void swap(int &x,int &y){
if (x == y) return;
x = x^y;
y = x^y;
x = x^y;
}
void add(int x,int y,int z){
ver[++tot] = y; next[tot] = head[x]; head[x] = tot;
ver[++tot] = x; next[tot] = head[y]; head[y] = tot;
}
void up(int i){
for (int pp = i>>1; pp; pp = i>>1){
if (d[h[i]] < d[h[pp]]){
swap(c[h[i]],c[h[pp]]);
swap(h[i],h[pp]);
}
else return;
i = pp;
}
}
void down(int i){
for (int pp = i<<1; pp <= p; pp = i<<1){
if (d[h[pp+1]] < d[h[pp]] && pp < p) pp++;
if (d[h[pp]] < d[h[i]]){
swap(c[h[i]],c[h[pp]]);
swap(h[i],h[pp]);
}
else return;
i = pp;
}
}
void dijis(int st){
int x,j;
p = 1;
memset(d,INF,sizeof(d));
memset(c,0,sizeof(c));
d[st] = 0;
h[p] = st;
while (p){
x = h[1];
c[x] = 0; c[h[p]] = 1;
h[1] = h[p--];
down(1);
for (j = head[x]; j; j = next[j]){
if (d[ver[j]] > d[x]+w[x][ver[j]]){
d[ver[j]] = d[x]+w[x][ver[j]];
if (!c[ver[j]]){
h[++p] = ver[j];
c[ver[j]] = p;
up(p);
}
else up(c[ver[j]]);
}
}
}
}
int main(){
freopen("djsa.in","r",stdin);
freopen("djsa.out","w",stdout);
int i,j,k,temp,x,y,z,minans;
scanf("%d%d",&n,&m);
for (i = 1; i <= m; i++){
scanf("%d%d%d",&x,&y,&z);
if (!w[x][y]){
add(x,y,z);
w[x][y] = z;
w[y][x] = z;
}
else{
w[x][y] = z;
w[y][x] = z;
}
}
minans = INF;
for (i = 0; i < n; i++){
dijis(i);
temp = 0;
for (j = 0; j < n; j++)
if (d[j] > temp) temp = d[j];
if (temp < minans) minans = temp,k = i;
}
printf("%d",k);
return 0;
}