| ||||||||||
| 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 | |||||||||
第一次写题解。。。。。#include<iostream>
#include<queue>
#include<algorithm>
#include<string.h>
#include<stdio.h>
#include<math.h>
#define MAXN 50
#define INF 2147483647
#define CPY(s,t) memcpy(s,t,sizeof(s))
using namespace std;
struct city {int index;string name;}c[40];//每一座城市的信息
struct query {int a,b;double dist;}s[200];//每一个路牌的信息
struct ans1 {int num;string name;}ans[50];//强迫症让我写这个
inline double abs(double a){if(a>=0)return a;return -a;}
bool cmp(ans1 a,ans1 b){if(a.num<b.num)return true;if(a.num>b.num)return false;return a.name<b.name;}
double dis[MAXN][MAXN];
int n,m,k,q;
void init()
{
for(int i = 0;i<=35;i++)
for(int j = 0;j<=35;j++)
if(i==j)dis[i][j] = 0;
else dis[i][j] = INF;
int t1,t2;
double t3;
for(int i = 1;i<=m;i++)
cin>>t1>>t2>>t3,dis[t1][t2] = t3,dis[t2][t1] = t3;
for(int i = 1;i<=k;i++)
cin>>c[i].index>>c[i].name;
cin>>q;
for(int i = 1;i<=q;i++)
cin>>s[i].a>>s[i].b>>s[i].dist;
}
void getans(int x)
{
int t = s[x].a;
int y = s[x].b;
int tail = 0;
for(int i = 1;i<=k;i++)
{
if(abs(dis[t][c[i].index] - dis[y][c[i].index] - dis[t][y]) <= 0.000001&&c[i].index!=t)
{
tail++;
ans[tail].num = int(dis[t][c[i].index] - s[x].dist + 0.5);
ans[tail].name = c[i].name;
}
}
sort(ans+1,ans+1+tail,cmp);
for(int i = 1;i<=tail;i++)
{
cout<<ans[i].name;
int len = ans[i].name.size();
for(int j = 1;j<=20-len;j++)
cout<<' ';
cout<<ans[i].num<<endl;
}
}
int main()
{
while(cin>>n>>m>>k)
{
init();
for(int k1=0;k1<n;k1++)//弗洛伊德算法
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(dis[i][k1]<dis[i][j]-dis[k1][j])
dis[i][j]=dis[i][k1]+dis[k1][j];
for(int i = 1;i<=q;i++)
{
getans(i);
cout<<endl;
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator