| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
用short邻接矩阵险过~~~#include<stdio.h>
#include<string.h>
#define N 5008
#define INF 0xffff;
int lowcast[N];
int num[N];
unsigned short w[N][N];
int ans;
int n,m;
void input();
struct node {
int u;
int v;
int value;
};
node eg[200005];
void dikjstra(int start);
int getsecond();
void show();
int main(){
//freopen("1.txt","r",stdin);
while (scanf("%d%d",&n,&m)!=EOF){
input();
ans=0;
dikjstra(1);
for (int i=1;i<=n;i++){
num[i]=lowcast[i];
}
dikjstra(n);
ans=getsecond();
//show();
printf("%d\n",ans);
}
}
void input(){
int a;int b;int c;
int s=1;
for (int i=1;i<N;i++){
for (int j=1;j<N;j++)
if (i==j)
w[i][j]=0;
else
w[i][j]=INF;
}
for (int i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
eg[i+1].u=a;
eg[i+1].v=b;
eg[i+1].value=c;
if (c<w[a][b]){
w[a][b]=w[b][a]=c;
}
}
}
void dikjstra(int start){
memset(lowcast,0,sizeof(lowcast));
int used[N]={0};
int i,j,k;
for (i=1;i<=n;i++){
lowcast[i]=w[start][i];
}
lowcast[start]=0;
used[start]=1;
for (i=0;i<n;i++){
int min=INF;
j=1;
for (k=1;k<=n;k++){
if (min>lowcast[k]&&!used[k]){
min=lowcast[k];
j=k;
}
}
used[j]=1;
for (k=1;k<=n;k++){
if (lowcast[j]+w[j][k]<lowcast[k]&&!used[k]){
lowcast[k]=lowcast[j]+w[j][k];
}
}
}
}
int getsecond(){
int i,j,k;
int min=INF;
int t;
for (i=1;i<=m;i++){
int tempu=eg[i].u;
int tempv=eg[i].v;
int tempvalue=eg[i].value;
t=lowcast[tempv]+num[tempu]+tempvalue;
if (t<min&&t>lowcast[1]){
min=t;
}
t=lowcast[tempu]+num[tempv]+tempvalue;
if (t<min&&t>lowcast[1]){
min=t;
}
}
return min;
}
void show(){
for (int i=1;i<=n;i++){
for (int j=1;j<=n;j++){
printf("%d ",w[i][j]);
}
printf("\n");
}
for (int i=1;i<=n;i++){
printf("%d ",lowcast[i]);
}
printf("\n");
for (int i=1;i<=n;i++){
printf("%d ",num[i]);
}
printf("\n");
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator