比赛 |
平凡的题目 |
评测结果 |
TWWWT |
题目名称 |
平凡的皮卡丘 |
最终得分 |
0 |
用户昵称 |
momo123 |
运行时间 |
2.001 s |
代码语言 |
C++ |
内存使用 |
6.42 MiB |
提交时间 |
2015-11-03 11:42:27 |
显示代码纯文本
#include<cstring>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#define MAX 9999999
using namespace std;
int n,m,x,y,z,ans=MAX;;
int map[1005][1005],dist[1005][1005];
int main()
{
freopen("both.in","r",stdin);
freopen("both.out","w",stdout);
cin>>n>>m;
if(n<=1000)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
map[i][j]=map[j][i]=-1;
dist[i][j]=dist[j][i]=MAX;
}
for(int i=1;i<=m;i++)
{
int u,v,c1,c2;
cin>>u>>v>>c1>>c2;
map[u][v]=dist[u][v]=c1;
map[v][u]=dist[v][u]=c2;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i!=j&&j!=k&&i!=k)
dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
int k=1;
for(int i=n;i>k;i--)
for(int j=i-1;j>k;j--)
{
if((map[i][k]==-1||map[k][j]==-1)&&(map[k][i]==-1||map[j][k]==-1)) continue;
if((map[i][k]!=-1&&map[k][j]!=-1)&&(map[k][i]==-1||map[j][k]==-1))
ans=min(ans,dist[j][i]+map[i][k]+map[k][j]);
if((map[k][i]!=-1&&map[j][k]!=-1)&&(map[i][k]==-1||map[k][j]==-1))
ans=min(ans,dist[i][j]+map[k][i]+map[j][k]);
if((map[i][k]!=-1&&map[k][j]!=-1)&&(map[k][i]!=-1&&map[j][k]!=-1))
ans=min(ans,min(dist[j][i]+map[i][k]+map[k][j],dist[i][j]+map[k][i]+map[j][k]));
}
if(ans!=MAX)cout<<ans<<endl;
else cout<<"-1"<<endl;
}
else cout<<"-1"<<endl;
}