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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

牛客编程巅峰赛S1第3场 - 黄金钻石 A.简单题 B.dfs C.并查集

發(fā)布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客编程巅峰赛S1第3场 - 黄金钻石 A.简单题 B.dfs C.并查集 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

鏈接:https://ac.nowcoder.com/acm/contest/6383/A
來源:牛客網(wǎng)

找臥底
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
題目描述
牛牛今天和大家玩了一個新游戲,除了牛牛以外還有n個人參加游戲,現(xiàn)在這n個人中的每個人從[1,n]中選擇一個數(shù)字,保證選出的數(shù)字均不重復(fù)。牛牛作為第n+1個人,充當(dāng)臥底的角色,要求臥底從1到n中選擇一個數(shù)字,現(xiàn)在將n+1個數(shù)字重新打亂順序,請找出臥底選擇的數(shù)字是多少。

示例1
輸入
復(fù)制
4,[1,2,1,4,3]
輸出
復(fù)制
1
備注:
其中1<=n<=100000。
要求時間復(fù)雜度為O(n),額外空間復(fù)雜度為O(1)

class Solution { public:/*** * @param n int整型 * @param a int整型vector * @return int整型*/int search(int n, vector<int>& a) {map<int,int>mp;for(int i=0;i<a.size();i++){if(mp[a[i]])return a[i];mp[a[i]]++;}}};

鏈接:https://ac.nowcoder.com/acm/contest/6383/B
來源:牛客網(wǎng)

時間限制:C/C++ 3秒,其他語言6秒
空間限制:C/C++ 262144K,其他語言524288K
64bit IO Format: %lld
題目描述
題意
在一顆有 nn 個結(jié)點(diǎn)且以 11 為根節(jié)點(diǎn)樹上,起初每個結(jié)點(diǎn)的初始權(quán)值為 00 。

現(xiàn)在有 qq 次操作,每次操作選擇將以 r_ir
i
?
為根節(jié)點(diǎn)的子樹上的所有結(jié)點(diǎn)權(quán)值增加 x_ix
i
?

求 qq 次操作后從 11 到 nn 每個結(jié)點(diǎn)的權(quán)值。

輸入
第一個參數(shù)為 nn,1\leq n \leq 100,0001≤n≤100,000

第二個參數(shù)為邊 (u_i, v_i)(u
i
?
,v
i
?
) 的集合,其中 (u_i, v_i)(u
i
?
,v
i
?
) 表示結(jié)點(diǎn) u_iu
i
?
與結(jié)點(diǎn) v_iv
i
?
之間有一條邊,1\leq u_i, v_i \leq n1≤u
i
?
,v
i
?
≤n

第三個參數(shù)為 qq,1 \leq q \leq 100,0001≤q≤100,000

第四個參數(shù)為 qq 次詢問的 (r_i, v_i)(r
i
?
,v
i
?
) 的集合,1\leq r_i \leq n, 0 \leq \lvert v_i \rvert \leq 1000,0001≤r
i
?
≤n,0≤∣v
i
?
∣≤1000,000

返回
從 11 到 nn 每個結(jié)點(diǎn)的權(quán)值。

示例1
輸入
復(fù)制
5,[(2,5),(5,3),(5,4),(5,1)],2,[(1, 3), (2, -1)]
輸出
復(fù)制
[3,2,3,3,3]
說明
第一次操作,將以 1 為根節(jié)點(diǎn)的子樹上的所有結(jié)點(diǎn)權(quán)值增加 3,此時結(jié)點(diǎn)的權(quán)值分別為 [3, 3, 3, 3, 3] ;
第二次操作,將以 2 為根節(jié)點(diǎn)的子樹上的所有結(jié)點(diǎn)權(quán)值增加 -1,此時結(jié)點(diǎn)的權(quán)值分別為 [3, 2, 3, 3, 3] ;

/*** struct Point {* int x;* int y;* };*/ const int maxn=1e5+5; int w[maxn],v[maxn]; vector<int>adj[maxn]; vector<long>ans; class Solution { public:/*** 從 1 到 n 每個結(jié)點(diǎn)的權(quán)值。* @param n int整型* @param Edge Point類vector (u, v) 集合* @param q int整型* @param Query Point類vector Point.x 為題中 r, Point.y為題中 v* @return long長整型vector*/void build(int fa,int u){w[u]=v[u]+w[fa];for(auto i:adj[u]){if(i==fa)continue;build(u,i);}}vector<long> solve(int n, vector<Point>& a, int q, vector<Point>& Query) {// write code herefor(int i=0;i<n-1;i++){int u=a[i].x;int v=a[i].y;adj[u].push_back(v);adj[v].push_back(u);}for(int i=0;i<q;i++){int x=Query[i].x;int y=Query[i].y;v[x]+=y;}build(0,1);for(int i=1;i<=n;i++){ans.push_back(w[i]);}return ans;} };

鏈接:https://ac.nowcoder.com/acm/contest/6383/C
來源:牛客網(wǎng)

題目描述
題意
牛牛有一個長為 nn 的排列 pp ,與 mm 對 (x_i, y_i)(x
i
?
,y
i
?
) 。

每對 (x_i, y_i)(x
i
?
,y
i
?
) 表示可以將 p_{x_i}p
x
i
?

?
的值與 p_{y_i}p
y
i
?

?
的值互換。

mm 對 (x_i, y_i)(x
i
?
,y
i
?
) 的使用順序與次數(shù)不限。

牛牛想知道,任意次操作之后他能得到的字典序最小的排列是什么

字典序定義:對于數(shù)字1、2、3…n的排列,不同排列的先后關(guān)系是從左到右逐個比較對應(yīng)的數(shù)字的先后來決定的。例如對于5個數(shù)字的排列 12354和12345,排列12345在前,排列12354在后。按照這樣的規(guī)定,5個數(shù)字的所有的排列中最前面的是12345,最后面的是 54321。(來自百度百科)

輸入
第一個參數(shù)為 nn,1\leq n \leq 100,0001≤n≤100,000

第二個參數(shù)為 mm,1\leq m \leq 100,0001≤m≤100,000

第三個參數(shù)為初始排列 pp,1\leq p_i\leq n1≤p
i
?
≤n

第四個參數(shù)為 mm 對 (x_i, y_i)(x
i
?
,y
i
?
), 1\leq x_i, y_i\leq n, x_i \neq y_i1≤x
i
?
,y
i
?
≤n,x
i
?


?
=y
i
?

返回
字典序最小的排列

示例1
輸入
復(fù)制
5,3,[5,2,3,4,1],[(2,4),(1,4),(3,4)]
輸出
復(fù)制
[2,3,4,5,1]
說明

  • 交換 (3, 4), 交換后的序列為: 5, 2, 4, 3, 1
  • 交換 (2, 4), 交換后的序列為: 5, 3, 4, 2, 1
  • 交換 (1, 4), 交換后的序列為: 2, 3, 4, 5, 1
  • /*** struct Point {* int x;* int y;* };*/int f[100010], a[100010]; priority_queue<int ,vector<int > , greater<> >q[100005]; class Solution { public:/*** 返回牛牛所能得到的字典序最小的排列* @param n int整型* @param m int整型* @param perm int整型vector* @param Pair Point類vector* @return int整型vector*/int find(int x){if(x==f[x]){return x;}return f[x]=find(f[x]);}void Union(int x, int y) {f[find(x)] = find(y);}vector<int> solve(int n, int m, vector<int>& perm, vector<Point>& Pair) {for (int i = 1; i <= n; i++)f[i]=i;for (auto i : Pair) Union(i.x, i.y);for (int i = 1; i <= n; i++) q[find(i)].push(perm[i-1]);vector<int> ans(n);for (int i = 1; i <= n; i++){ans[i-1]=q[find(i)].top();q[find(i)].pop();}return ans;} };

    總結(jié)

    以上是生活随笔為你收集整理的牛客编程巅峰赛S1第3场 - 黄金钻石 A.简单题 B.dfs C.并查集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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