日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【CCSP真题】第一题 摘水果(拓扑排序)

發(fā)布時間:2024/1/1 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【CCSP真题】第一题 摘水果(拓扑排序) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.



原題鏈接

思路:

對每棵樹進(jìn)行拓?fù)渑判?#xff0c;同一時間可以采摘的進(jìn)行暴力即可,代碼寫得有點丑陋…

#include<iostream> #include<vector> #include<queue> using namespace std; #define ll long longint val[1005]; vector<int>ve[1005]; int indeg[1005]; queue<int>q1,q2; vector<int>ans; int main() {int n;scanf("%d",&n);for(int i=1;i<=2*n;i++){scanf("%d",&val[i]);}for(int i=1;i<=2*n;i++){int t;scanf("%d",&t);if(t==0)continue;ve[i].push_back(t);indeg[t]++;}for(int i=1;i<=n;i++){if(indeg[i]==0)q1.push(i);}for(int i=n+1;i<=2*n;i++){if(indeg[i]==0)q2.push(i);}for(int i=0;i<n;i++){int ap=-1,pr=-1;int q1SIZE=q1.size(),q2SIZE=q2.size();for(int j=0;j<q1SIZE;j++){int apple=q1.front();q1.pop();for(int k=0;k<q2SIZE;k++){int pear=q2.front();q2.pop();q2.push(pear);if(ap==-1){ap=apple;pr=pear;}else if((val[apple]^val[pear])>(val[ap]^val[pr])){ap=apple;pr=pear;}else if((val[apple]^val[pear])==(val[ap]^val[pr])){if(val[apple]>val[ap]){ap=apple;pr=pear;}else if(val[apple]==val[ap]){if(apple>ap){ap=apple;pr=pear;}else if(apple==ap){if(pear>pr){ap=apple,pr=pear;}}}}}q1.push(apple);}ans.push_back(val[ap]^val[pr]);for(int j=0;j<q1SIZE;j++){int tmp=q1.front();q1.pop();if(tmp==ap){for(int k=0;k<ve[tmp].size();k++){indeg[ve[tmp][k]]--;if(indeg[ve[tmp][k]]==0){q1.push(ve[tmp][k]);}}}else{q1.push(tmp);}}for(int j=0;j<q2SIZE;j++){int tmp=q2.front();q2.pop();if(tmp==pr){for(int k=0;k<ve[tmp].size();k++){indeg[ve[tmp][k]]--;if(indeg[ve[tmp][k]]==0){q2.push(ve[tmp][k]);}}}else{q2.push(tmp);}}}for(int i=0;i<n;i++){if(i!=n-1)cout<<ans[i]<<" ";else cout<<ans[i]<<'\n';} }

總結(jié)

以上是生活随笔為你收集整理的【CCSP真题】第一题 摘水果(拓扑排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。