记录编号 589178 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 Florr 最终得分 100
用户昵称 Gravatarflyfree 是否通过 通过
代码语言 C++ 运行时间 0.996 s
提交时间 2024-07-03 17:02:34 内存使用 3.36 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAXN 100005
  4. int n,m,k;
  5. int l[MAXN],r[MAXN],c[MAXN],s[MAXN],used[MAXN],trn[MAXN];
  6. int ansz[MAXN],ansn;
  7. int dfs(int idx,int cnt,int root){
  8. int lock=s[r[idx]];
  9. // cout<<idx<<" "<<cnt << " "<<root<<" "<<lock<<endl;
  10. if(!lock){
  11. s[r[idx]]=idx;
  12. s[l[idx]]=0;
  13. used[idx]=1;
  14. swap(l[idx],r[idx]);
  15. ansz[++ansn]=idx;
  16. k--;
  17. return 1;
  18. }
  19. if(lock>=root||cnt+1>k||used[lock])return 0;
  20. int ans=dfs(lock,cnt+1,root);
  21. if(ans){
  22. s[r[idx]]=idx;
  23. s[l[idx]]=0;
  24. used[idx]=1;
  25. swap(l[idx],r[idx]);
  26. ansz[++ansn]=idx;
  27. k--;
  28. return 1;
  29. }else{
  30. return 0;
  31. }
  32. }
  33. int main(){
  34. freopen("Florr.in","r",stdin);
  35. freopen("Florr.out","w",stdout);
  36. cin>>n>>m>>k;
  37. for(int i=1;i<=n;i++){
  38. cin>>c[i];
  39. }
  40. for(int i=1;i<=m;i++){
  41. cin>>l[i]>>r[i];
  42. s[l[i]]=i;
  43. }
  44. for(int i=m;i;i--){
  45. // cout<<c[l[i]]<<" "<<c[r[i]]<<endl;
  46. if((c[r[i]]>c[l[i]]||trn[l[i]])&&k&&!used[i]){
  47. trn[r[i]]=1;
  48. // cout<<i<<" "<<k<<endl;
  49. dfs(i,1,i);
  50. }else{
  51. trn[l[i]]=1;
  52. }
  53. }
  54. cout<<ansn<<endl;
  55. for(int i=1;i<=ansn;i++)cout<<ansz[i]<<endl;
  56. return 0;
  57. }