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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces Gym 100650B Countdown (离线)

發布時間:2025/4/16 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces Gym 100650B Countdown (离线) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:http://codeforces.com/gym/100650

根據給出的樹和d,求出一些結點,這些結點形成子樹的第d層結點數應該盡量多,具體要求可以參考題目。

dfs一個結點前保存詢問深度的答案,訪問完以后減去之前的值就得到答案了。

#include<bits/stdc++.h> using namespace std; const int maxn = 1100;vector<string> names; map<string,int> mp; int id_cnt; #define se second #define MP make_pairint ID(const string & s){map<string,int>::iterator i = mp.find(s);if(i != mp.end()) return i->se;names.push_back(s);mp.insert(MP(s,id_cnt));return id_cnt++; } int deg[maxn]; int head[maxn],nxt[maxn],to[maxn],ecnt;void addEdge(int u,int v) {to[ecnt] = v;nxt[ecnt] = head[u];head[u] = ecnt++; }int pre[maxn*2]; int cnt[maxn*2]; int deep[maxn];struct Node {int d,id;bool operator < (const Node & x) const {return d < x.d || ( d == x.d && names[id] > names[x.id] );} };priority_queue<Node> q;int n,d; void dfs(int u) {cnt[deep[u]]++;int qd = deep[u]+d;if(qd < maxn) pre[u] = cnt[qd];for(int i = head[u]; ~i; i = nxt[i]){int v = to[i];deep[v] = deep[u]+1;dfs(v);}if(qd<maxn){int ans = cnt[qd]-pre[u];if(ans) q.push(Node{ans,u});} }void init() {names.clear();mp.clear();id_cnt = 0;ecnt = 0;memset(deg,0,sizeof(deg));memset(head,-1,sizeof(head));memset(cnt,0,sizeof(cnt));while(q.size()) q.pop(); }char str[500];void read() {scanf("%d%d",&n,&d);while(n--){int ch; scanf("%s%d",str,&ch);int fa = ID(str);while(ch--){scanf("%s",str);int v = ID(str);deg[v]++;addEdge(fa,v);}} }void topo() {int root;n = mp.size();for(int i = 0; i < n; i++){if(deg[i] == 0) { root = i; break; }}deep[root] = 0;dfs(root); }int main() {//freopen("in.txt","r",stdin);int T; scanf("%d",&T);for(int kas = 1; kas <= T; kas++){init();read();topo();printf("Tree %d:\n",kas);for(int i = 1; i <= 3; i++){if(q.empty()) break;Node x = q.top(); q.pop();printf("%s %d\n",names[x.id].c_str(),x.d);if(i == 3){int pre = x.d;while(q.size()){x = q.top(); q.pop();if(x.d == pre){printf("%s %d\n",names[x.id].c_str(),x.d);}else {break;}}}}if(kas != T) putchar('\n');}return 0; }

?

轉載于:https://www.cnblogs.com/jerryRey/p/4740203.html

總結

以上是生活随笔為你收集整理的Codeforces Gym 100650B Countdown (离线)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。