| 比赛 |
NOIP2025模拟赛4 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
Daily Commute |
最终得分 |
100 |
| 用户昵称 |
梦那边的美好TT |
运行时间 |
3.441 s |
| 代码语言 |
C++ |
内存使用 |
6.42 MiB |
| 提交时间 |
2025-11-27 10:59:25 |
显示代码纯文本
#include<bits/stdc++.h>
#define N 200001
#define pr pair<int,int>
using namespace std;
int n,w,d,s[N],a[N],h[N],e[N],nxt[N],dis[N],u,v;
priority_queue<pr,vector<pr>,greater<pr>> pq;
deque<int> dq;
int main(){
freopen("Commute.in","r",stdin);
freopen("Commute.out","w",stdout);
cin>>n>>w>>d;
for(int i=1;i<=w;i++){
cin>>u>>v;
u--;
v--;
e[i]=u;
nxt[i]=h[v];
h[v]=i;
}
for(int i=0;i<n;i++){
cin>>s[i];
a[--s[i]]=i;
dis[i]=1e9;
}
dq.emplace_back(n-1);
dis[n-1]=0;
while(!dq.empty()){
int i=dq.front();
dq.pop_front();
for(int j=h[i];j;j=nxt[j]){
if(dis[e[j]]==1e9){
dis[e[j]]=dis[i]+1;
dq.emplace_back(e[j]);
}
}
}
for(int i=0;i<n;i++) pq.emplace(dis[i]+a[i],i);
while(d--){
cin>>u>>v;
u--;
v--;
swap(s[u],s[v]);
u=s[u];
v=s[v];
swap(a[u],a[v]);
pq.emplace(dis[u]+a[u],u);
pq.emplace(dis[v]+a[v],v);
while(pq.top().first^dis[pq.top().second]+a[pq.top().second]) pq.pop();
cout<<pq.top().first<<endl;
}
return 0;
}