比赛 |
9.27练习赛 |
评测结果 |
AMATMAAMWTTT |
题目名称 |
观光 |
最终得分 |
33 |
用户昵称 |
郑霁桓 |
运行时间 |
13.941 s |
代码语言 |
C++ |
内存使用 |
51.00 MiB |
提交时间 |
2024-09-27 20:55:15 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long n,m,x,y,z,s[1005],tp,sy[1005];
long long T,d[1005],pp,st,ed,t,dy[1005];
queue<pair<long long,long long> >q;
vector<pair<long long,long long> >v[1000005];
inline long long read(){
long long xx=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
ch=getchar();
}
while(ch>='0'&&ch<='9'){
xx=(xx<<1)+(xx<<3)+(ch^48);
ch=getchar();
}
return xx;
}
inline void write(long long x){
if(x>9){
write(x/10);
}
putchar(x%10+'0');
return;
}
int main(){
freopen("sightseeing.in","r",stdin);
freopen("sightseeing.out","w",stdout);
T=read();
while(T--){
n=read();
m=read();
for(int i=1;i<=n;i++){
v[i].clear();
s[i]=0;
}
while(!q.empty()){
q.pop();
}
for(int i=1;i<=m;i++){
x=read();
y=read();
z=read();
v[x].push_back({y,z});
}
st=read();
ed=read();
q.push({st,0});
for(int i=1;i<=n;i++){
d[i]=100000000000;
}
while(!q.empty()){
tp=q.front().first;
pp=q.front().second;
q.pop();
if(pp<d[tp]){
s[tp]=1;
d[tp]=pp;
}else if(pp==d[tp]){
s[tp]++;
}else{
continue;
}
for(int i=0;i<v[tp].size();i++){
if(d[tp]+v[tp][i].second<=d[v[tp][i].first]){
q.push({v[tp][i].first,d[tp]+v[tp][i].second});
}
}
}
while(!q.empty()){
q.pop();
}
q.push({st,0});
for(int i=1;i<=n;i++){
dy[i]=100000000000;
}
while(!q.empty()){
tp=q.front().first;
pp=q.front().second;
q.pop();
if(pp>d[tp]&&pp<dy[tp]){
sy[tp]=1;
dy[tp]=pp;
}else if(pp==dy[tp]){
sy[tp]++;
}else if(pp>dy[tp]||(tp!=st&&pp==d[tp])){
continue;
}
for(int i=0;i<v[tp].size();i++){
if(dy[tp]+v[tp][i].second<=dy[v[tp][i].first]){
q.push({v[tp][i].first,dy[tp]+v[tp][i].second});
}
if(d[tp]+v[tp][i].second<=dy[v[tp][i].first]){
q.push({v[tp][i].first,d[tp]+v[tp][i].second});
}
}
}
if(dy[ed]==d[ed]+1){
s[ed]+=sy[ed];
}
write(s[ed]);
puts("");
}
return 0;
}