当前位置:网站首页>F. Weights assignment for tree edges problem solving Report
F. Weights assignment for tree edges problem solving Report
2022-07-05 15:25:00 【wch(】
F. Weights Assignment For Tree Edges Problem solving report
label : graph theory , Undirected graph
The question :
The problem is quite long , It took me half an hour to understand , The most important thing is patience .
The title first gives a sequence b Count into parent node , Such as b[1]=2, That node 2 Is the node 1 The father node of ,b[2]=2, node 2 yes 2 The father node of , That is to say, nodes 2 It's the root node of the tree .
And then give a p Nodes sort each node ,p[1]=3 That is, node 3 Number one .
use dist The array counts the distance from each point to the root node , Then let's assign a value to the edge weight , Guarantee dist[pi]<dist[pi+1], That is, the lower the ranking, the farther the distance from the point to the root node .
Their thinking
After understanding the meaning of the topic, you can find that the topic is not so difficult .
For a given arrangement p, If there is a node whose parent node ranks lower than that node , dist[ Parent node ]>dist[ The node ], Obviously illegal .
We use it ans Array to include edge weights . To meet the conditions of the topic dist[pi]<dist[pi+1], It can be set by yourself
dist[pi]+1=dist[pi+1];
Then the key code can be obtained to calculate the edge weight .
ans[p[i]] = dist[p[i - 1]] - dist[b[p[i]]] + 1;
dist[p[i]] = dist[b[p[i]]] + ans[p[i]];
Code implementation
#include <iostream>
using namespace std;
const int N = 2 * 1e5 + 50;
int b[N], p[N], dist[N], ans[N];
int main() {
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
int fa = 0;
for (int i = 1; i <= n; i++) {
cin >> b[i];
if (b[i] == i) fa = i;
}
for (int i = 1; i <= n; i++)
cin >> p[i];
for (int i = 1; i <= n; i++)
ans[i] = dist[i] = -1;// Mark the array as -1, Indicates that it has not been marked
int f = 1;
if (p[1] != fa) f = 0;
else
{
ans[p[1]] = 0, dist[p[1]] = 0;
for (int i=2;i<=n;i++)
{
if (dist[b[p[i]]]==-1) { f = 0; break; }
// If the parent node has not been assigned , It indicates that the parent node is behind this node , Illegal array
ans[p[i]] = dist[p[i - 1]] - dist[b[p[i]]] + 1;
dist[p[i]] = dist[b[p[i]]] + ans[p[i]];
}
}
if (f == 0) cout << -1 << endl;
else {
for (int i=1;i<=n;i++) cout << ans[i] << " ";
cout << endl;
}
}
return 0;
}
Ah ha ha ha , My task is finished .
边栏推荐
- 华为哈勃化身硬科技IPO收割机
- What are CSRF, XSS, SQL injection, DDoS attack and timing attack respectively and how to prevent them (PHP interview theory question)
- go学习 ------jwt的相关知识
- 当代人的水焦虑:好水究竟在哪里?
- 复现Thinkphp 2.x 任意代码执行漏洞
- lv_font_conv离线转换
- I spring and autumn blasting-2
- How can I quickly check whether there is an error after FreeSurfer runs Recon all—— Core command tail redirection
- Mysql---- function
- easyOCR 字符識別
猜你喜欢
随机推荐
美团优选管理层变动:老将刘薇调岗,前阿里高管加盟
你童年的快乐,都是被它承包了
R 熵权法计算权重及综合得分
Bugku's Ah Da
[JVM] operation instruction
swiper. JS to achieve barrage effect
[12 classic written questions of array and advanced pointer] these questions meet all your illusions about array and pointer, come on!
How can I quickly check whether there is an error after FreeSurfer runs Recon all—— Core command tail redirection
OSI 七层模型
Coding devsecops helps financial enterprises run out of digital acceleration
Number protection AXB function! (essence)
Thymeleaf uses background custom tool classes to process text
Easyocr character recognition
Database learning - Database Security
复现Thinkphp 2.x 任意代码执行漏洞
episodic和batch的定义
How can the boss choose programmers to help me with development?
Talk about your understanding of microservices (PHP interview theory question)
I spring and autumn blasting-1
Brief introduction of machine learning framework