| 比赛 |
NOIP2025模拟赛4 |
评测结果 |
RRRRRRRRRRRRRRRRRRRR |
| 题目名称 |
Daily Commute |
最终得分 |
0 |
| 用户昵称 |
梦那边的美好ME |
运行时间 |
1.168 s |
| 代码语言 |
C++ |
内存使用 |
13.46 MiB |
| 提交时间 |
2025-11-27 10:42:30 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n,w,f;
ll dis[210000];
ll s[210000];
vector<ll> g[210000];
struct node{
ll pos,id;
bool operator<(const node&x) const{
return pos-1+dis[id]>x.pos-1+dis[x.id];
}
};
priority_queue<node> qq;
void bfs(){
for(int i=1;i<n;i++){
dis[i]=2e9;
}
queue<ll>q;
q.push(n);
while(q.size()){
ll u=q.front();
q.pop();
for(auto v:g[u]){
if(dis[v]==2e9){
q.push(v);
dis[v]=dis[u]+1;
}
}
}
return;
}
int main(){
freopen("Commute.in","r",stdin);
freopen("Commute.out","W",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>w>>f;
for(int i=1;i<=w;i++){
ll u,v;
cin>>u>>v;
g[v].push_back(u);
}
for(int i=1;i<=n;i++){
cin>>s[i];
}
bfs();
for(int i=1;i<=n;i++){
qq.push({i,s[i]});
}
for(int i=1;i<=f;i++){
ll x,y;
cin>>x>>y;
swap(s[x],s[y]);
qq.push({x,s[x]});
qq.push({y,s[y]});
while(s[qq.top().pos]!=qq.top().id){
qq.pop();
}
cout<<qq.top().pos-1+dis[qq.top().id]<<"\n";
}
return 0;
}