#include<bits/stdc++.h>
using namespace std;
class rr{
public:
int i;
int l;
int t;
};
class re{
public:
// bool s;//是否连通
int name;
int num;
rr nu[505];
int l=0;
int t=0;
int f=-1;
bool sf;
int jie;
re(){
// s=0;
jie=0;
sf=0;
num=0;
f=-1;
}
};
re r[505];
re r1[505];
queue<re>s1,s2;
int n,m;
int q,z;
int main(){
cin>>n;
cin>>m;
for(int i=0;i<m;i++){
int i1,i2;
cin>>i1;
cin>>i2;
// if(i1==5){
// cout<<i2<<endl;
// }
// else if(i2==5){
// cout<<i1<<endl;
// }
int f;
cin>>f;
r[i1].name=i1;
r[i1].num++;
r[i1].nu[r[i1].num].i=i2;
// if(i1==5){
// cout<<r[i1].nu[r[i1].num].i<<endl;
// }
cin>>r[i1].nu[r[i1].num].l;
cin>>r[i1].nu[r[i1].num].t;
// r[i1][i2].s=1;
if(f==0){
r[i2].num++;
r[i2].nu[r[i2].num].i=i1;
// if(i2==5){
// cout<<r[i2].nu[r[i2].num].i<<endl;
// }
r[i2].nu[r[i2].num].l=r[i1].nu[r[i1].num].l;
r[i2].nu[r[i2].num].t=r[i1].nu[r[i1].num].t;
}
}
for(int i=0;i<505;i++){
r1[i]=r[i];
}
cin>>q;
cin>>z;
s1.push(r[q]);
s2.push(r1[q]);
r[q].sf=1;
r1[q].sf=1;
while(!s1.empty()){
// cout<<1<<endl;
// if(s1.front().name==z){
cout<<s1.front().f<<endl;
// break;
// }
// else{
for(int i=1;i<s1.front().num+1;i++){
// cout<<s1.front().name<<" "<<s1.front().num<<" "<<i<<endl;
re tmp=s1.front();
if(r[tmp.nu[i].i].l==tmp.l+tmp.nu[i].l&&r[tmp.nu[i].i].jie>tmp.jie+1){
r[tmp.nu[i].i].f=tmp.name;
r[tmp.nu[i].i].l=tmp.l+tmp.nu[i].l;
r[tmp.nu[i].i].t=tmp.t+tmp.nu[i].t;
r[tmp.nu[i].i].sf=1;
r[tmp.nu[i].i].jie=tmp.jie+1;
s1.push(r[tmp.nu[i].i]);
}
else if(r[tmp.nu[i].i].l>tmp.l+tmp.nu[i].l){
r[tmp.nu[i].i].f=tmp.name;
r[tmp.nu[i].i].l=tmp.l+tmp.nu[i].l;
r[tmp.nu[i].i].t=tmp.t+tmp.nu[i].t;
r[tmp.nu[i].i].sf=1;
r[tmp.nu[i].i].jie=tmp.jie+1;
s1.push(r[tmp.nu[i].i]);
}
// if(r[tmp.nu[i].i].sf==1&&(r[tmp.nu[i].i].t<=tmp.t+tmp.nu[i].t||r[tmp.nu[i].i].l<=tmp.l+tmp.nu[i].l)){
if(r[tmp.nu[i].i].sf==1){
// cout<<s1.front().nu[i].i<<endl;
continue;
}
// cout<<s1.front().nu[i].i<<endl;
r[tmp.nu[i].i].f=tmp.name;
r[tmp.nu[i].i].l=tmp.l+tmp.nu[i].l;
r[tmp.nu[i].i].t=tmp.t+tmp.nu[i].t;
r[tmp.nu[i].i].sf=1;
r[tmp.nu[i].i].jie=tmp.jie+1;
s1.push(r[tmp.nu[i].i]);
}
s1.pop();
// }
}
while(!s2.empty()){
// cout<<1<<endl;
for(int i=1;i<s2.front().num+1;i++){
// cout<<2<<endl;
re tmp=s2.front();
if(r1[tmp.nu[i].i].t==tmp.t+tmp.nu[i].t&&r1[tmp.nu[i].i].l>tmp.l+tmp.nu[i].l){
r1[tmp.nu[i].i].f=tmp.name;
r1[tmp.nu[i].i].l=tmp.l+tmp.nu[i].l;
r1[tmp.nu[i].i].t=tmp.t+tmp.nu[i].t;
r1[tmp.nu[i].i].sf=1;
// if(tmp.nu[i].i==5){
// cout<<1<<endl;
// }
// r1[tmp.nu[i].i].jie=tmp.jie+1;
s2.push(r1[tmp.nu[i].i]);
}
else if(r1[tmp.nu[i].i].t>tmp.t+tmp.nu[i].t){
r1[tmp.nu[i].i].f=tmp.name;
r1[tmp.nu[i].i].l=tmp.l+tmp.nu[i].l;
r1[tmp.nu[i].i].t=tmp.t+tmp.nu[i].t;
r1[tmp.nu[i].i].sf=1;
// r1[tmp.nu[i].i].jie=tmp.jie+1;
//if(tmp.nu[i].i==5){
// cout<<1<<endl;
// }
s2.push(r1[tmp.nu[i].i]);
}
if(r1[tmp.nu[i].i].sf==1){
continue;
}
r1[tmp.nu[i].i].f=tmp.name;
r1[tmp.nu[i].i].l=tmp.l+tmp.nu[i].l;
r1[tmp.nu[i].i].t=tmp.t+tmp.nu[i].t;
r1[tmp.nu[i].i].sf=1;
if(tmp.nu[i].i==5){
cout<<1<<endl;
}
s2.push(r1[tmp.nu[i].i]);
}
s2.pop();
}
// cout<<1<<endl;
int l[505];
int l1[505];
int ee=0;
int ee1=0;
int t=z;
int t1=z;
int time=r1[z].t;
int dis=r[z].l;
// cout<<time<<" "<<dis<<endl;
// l1[ee1++]=t1;
// l[ee++]=t;
while(1){
// cout<<1<<endl;
if(t==-1){
break;
}
l[ee++]=t;
t=r[t].f;
}
while(1){
// cout<<1<<endl;
if(t1==-1){
break;
}
l1[ee1++]=t1;
t1=r1[t1].f;
}
// cout<<ee1<<endl;
if(ee1==ee){
for(int i=0;i<ee;i++){
if(l1[i]!=l[i]){
break;
}
}
cout<<"Time = "<<time<<"; Distance = "<<dis<<": ";
int g;
for(g=ee1-1;g>0;g--){
cout<<l1[g]<<" => ";
}
cout<<l1[g]<<endl;
return 0;
}
cout<<"Time = "<<time<<": ";
int g;
for(g=ee1-1;g>0;g--){
cout<<l1[g]<<" => ";
}
cout<<l1[g]<<endl;
cout<<"Distance = "<<dis<<": ";
for(g=ee-1;g>0;g--){
cout<<l[g]<<" => ";
}
cout<<l[g]<<endl;
return 0;
}
7-28 天梯地图
最新推荐文章于 2022-03-15 12:14:17 发布