比赛 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;
}