其他分享
首页 > 其他分享> > Luogu p2441 角色属性树

Luogu p2441 角色属性树

作者:互联网

题目链接

https://www.luogu.com.cn/problem/P2441

问题分析

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 10;
int a[maxn];
int fa[maxn];
int read()
{
        int x = 0, f = 1;
        char c = getchar();
        while (c < '0' || c > '9')
        {
                if (c == '-')
                        f = -1;
                c = getchar();
        }
        while (c >= '0' && c <= '9')
        {
                x = x * 10 + (c - '0');
                c = getchar();
        }
        return x * f;
}
int main()
{
        int n, k;
        n = read(), k = read();
        for (int i = 1; i <= n; i++)
        {
                a[i] = read();
        }
        for (int i = 1; i <= n - 1; i++)
        {
                int x, y;
                x = read();
                y = read();
                fa[y] = x;
        }
        while (k--)
        {
                int opr;
                opr = read();
                if (opr == 2)
                {
                        int i, w;
                        i = read(), w = read();
                        a[i] = w;
                }
                else if (opr == 1)
                {
                        int x;
                        x = read();
                        if (fa[x] == x)
                        {
                                puts("-1");
                        }
                        else
                        {
                                int z = x;
                                //z指向当前节点
                                bool flag = 0;
                                while (x != fa[x])
                                {
                                        x = fa[x];
                                        if (__gcd(a[x], a[z]) != 1)
                                        {
                                                flag = 1;
                                                break;
                                        }
                                }
                                if (flag && (x != 0))
                                {
                                        printf("%d\n", x);
                                }
                                else
                                        puts("-1");
                        }
                }
        }
        return 0;
}

标签:gcd,opr,fa,int,Luogu,while,read,p2441,属性
来源: https://blog.csdn.net/zhy_cx/article/details/119391776