| 比赛 |
NOIP2025模拟赛4 |
评测结果 |
AAAAAAAAAAAAAAAAAAAA |
| 题目名称 |
Daily Commute |
最终得分 |
100 |
| 用户昵称 |
郑霁桓 |
运行时间 |
4.434 s |
| 代码语言 |
C++ |
内存使用 |
12.13 MiB |
| 提交时间 |
2025-11-27 10:20:36 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,w,d,xx,yy,tp,a[200005],p[200005],b[200005],vs[200005];
vector<int>v[200005];
const int I=1e8;
priority_queue<pair<int,int> >q;
set<pair<int,int> >st;
int main(){
freopen("Commute.in","r",stdin);
freopen("Commute.out","w",stdout);
ios::sync_with_stdio(false);
cin>>n>>w>>d;
for(int i=1;i<=w;i++){
cin>>xx>>yy;
v[yy].push_back(xx);
}
for(int i=1;i<n;i++) p[i]=I;
q.push({0,n});
while(!q.empty()){
tp=q.top().second;
q.pop();
if(vs[tp]) continue;
vs[tp]=1;
for(int i=0;i<v[tp].size();i++){
if(p[v[tp][i]]>p[tp]+1){
p[v[tp][i]]=p[tp]+1;
if(!vs[v[tp][i]]) q.push({-p[v[tp][i]],v[tp][i]});
}
}
}
for(int i=1;i<=n;i++) cin>>a[i],b[a[i]]=i-1;
for(int i=1;i<=n;i++){
st.insert({b[i]+p[i],i});
}
for(int i=1;i<=d;i++){
cin>>xx>>yy;
int px=xx,py=yy;
xx=a[xx],yy=a[yy];
st.erase({b[xx]+p[xx],xx});
st.erase({b[yy]+p[yy],yy});
swap(a[px],a[py]);
swap(b[xx],b[yy]);
st.insert({b[xx]+p[xx],xx});
st.insert({b[yy]+p[yy],yy});
cout<<((*st.begin()).first)<<"\n";
}
return 0;
}