【图的存储】公路查询
题目描述
一个国家有n个城市编号为1至n,被已有的m条单向高速公路连接,每条高速公路有一个长度len。现在政府决定建造新的高速公路,在此之前,需要你将已有的公路信息存储并提供查询。一共将会有q次查询,每次查询一个城市x,输出所有以城市x为起点的公路信息。
输入格式
第一行3个整数n,m,q
接下来m行每行三个整数x,y,len
接下来q行,每行一个整数x
输出格式
对于每个查询,输出所有以x为起点的公路的终点和距离
输出时,后记录的边先输出。
样例 #1
样例输入 #1
4 4 3
1 2 3
1 2 4
1 2 5
3 4 1
1
3
4
样例输出 #1
2 5
2 4
2 3
4 1
——————————————————————————————————————————————
思路如下
结构体储存所有的路,用数组来记录起点为a的路的最后一条是哪个,并且每一次在结构体存储上一条路的结构体下标
代码如下
/*
-----------fjn-----------
*/
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define F (100000007)
#define MAXN (100+5)
typedef long long ll;
struct node{
int x;
int y;
int z;
int q;
};
node ls[100006];
int arr[100006];
int main(){
int n,m,q;
cin>>n>>m>>q;
int a;
for(int i=1;i<=m;i++){
cin>>ls[i].x>>ls[i].y>>ls[i].z;
ls[i].q=arr[ls[i].x];
arr[ls[i].x]=i;
}
for(int i=1;i<=q;i++){
cin>>a;
a=arr[a];
while(a!=0){
cout<<ls[a].y<<" "<<ls[a].z<<endl;
a=ls[a].q;
// cout<<"____"<<a<<endl;
}
}
return 0;
}