标签:code 排列 names space def esc UNC == lun
给定一个长度为 $ n $ 的 $ 1-n $ 的全排列,第 $ i $ 个数表示站在第 $ i $ 位的学生的编号
给定 $ m $ 对 $ (u,v) $,如果编号 $ u $ 的学生在编号 $ v $ 的学生前面一位,则可以将他们的位置互换,问最后一个学生能向前移动多少位
从右往左扫描所有位置,将每个位置上的人尽可能地向右换即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1000005;
int n,m,p[N],d[N];
vector <int> g[N];
bool cmp(int u,int v) {
return d[u]<d[v];
}
signed main() {
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>p[i], d[p[i]]=i;
for(int i=1;i<=m;i++) {
int x,y;
cin>>x>>y;
g[x].push_back(y);
}
for(int i=n-1;i>=1;--i) {
int u=p[i];
sort(g[u].begin(),g[u].end(),cmp);
for(auto q:g[u]) {
if(d[u]+1==d[q]) ++d[u],--d[q];
}
}
cout<<n-d[p[n]];
}
[CF1136D] Nastya Is Buying Lunch - 贪心
标签:code 排列 names space def esc UNC == lun
原文地址:https://www.cnblogs.com/mollnn/p/12829592.html