首页 > 其他分享 >2028E - Alice's Adventures in the Rabbit Hole

2028E - Alice's Adventures in the Rabbit Hole

时间:2024-11-11 17:20:02浏览次数:1  
标签:dep return 2028E res Alice int Hole define mod

可以先从一条链的情况开始观察,然后发现每次都会选深度最小的子节点(minf(v)),可以看作一个短链剖分,不过我不是这么写的
g(v)表示的是f(v)是f(u)的几分之几
我推的式子是这两个,但是我没法证明g(v)不会等于2使得分母为0
但是我觉得因为g(x)一定是合法的所以显然2-g(v)不会为0

\(f(x)=\frac{1}{2}(f(u)+min(f(v))\)
\(g(x)=\frac{1}{2-g(v)}\)

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define lowbit(x) (x & (-x))
#define pii pair<int, int>
#define mkp make_pair

const int N = 2e5 + 10, mod = 998244353;

int g[N], f[N], n, dep[N];
vector<int> E[N];

int qpow(int x, int y)
{
    int res = 1;
    while (y > 0)
    {
        if (y & 1)
            res = res * x % mod;
        x = x * x % mod;
        y >>= 1;
    }
    return res;
}
int inv(int x)
{
    return qpow(x, mod - 2);
}
int sub(int a, int b)
{
    return (a - b < 0) ? (a - b + mod) : (a - b);
}
int add(int a, int b)
{
    return (a + b > mod) ? (a + b - mod) : (a + b);
}
void dfs(int x, int u)
{
    int mn = 0x3f3f3f3f, flag = -1;
    for (int i : E[x])
    {
        if (i == u)
            continue;
        dfs(i, x);
        if (dep[i] < mn)
            flag = i, mn = dep[i];
    }
    if (x == 1)
    {
        f[x] = 1;
        return;
    }
    if (flag == -1)
    {
        dep[x] = 1;
        f[x] = 0;
        g[x] = 0;
        // cout<<x<<endl;
        return;
    }
    dep[x] = mn + 1;
    // cout<<g[flag]<<endl;
    g[x] = inv(sub(2, g[flag]));
    // cout<<x<<' '<<flag<<' '<<g[flag]<<' '<<g[x]<<endl;
}
void dfs2(int x, int fa)
{
    for (int i : E[x])
    {
        if (i == fa)
            continue;
        f[i] = f[x] * g[i] % mod;
        // cout<<"MK"<<i<<' '<<f[x]<<' '<<g[i]<<endl;
        dfs2(i, x);
    }
    return;
}
void solve()
{
    cin >> n;
    for (int i = 1; i < n; i++)
    {
        int u, v;
        cin >> u >> v;
        E[u].push_back(v);
        E[v].push_back(u);
    }
    dfs(1, 0);
    dfs2(1, 0);
    for (int i = 1; i <= n; i++)
        cout << f[i] << ' ', f[i] = g[i] = dep[i] = 0, E[i].clear();
    cout << endl;
}

signed main()
{
    ios::sync_with_stdio(false);
    int T;
    cin >> T;
    while (T--)
        solve();
}

标签:dep,return,2028E,res,Alice,int,Hole,define,mod
From: https://www.cnblogs.com/lyrrr/p/18540169

相关文章

  • 2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice 和 Bob 正在进行一个有 n 个关
    2024-11-03:得到更多分数的最少关卡数目。用go语言,Alice和Bob正在进行一个有n个关卡的游戏,其中每个关卡要么是困难模式(possible[i]==0),要么是简单模式(possible[i]==1)。玩家在游戏中获得分数的规则如下:通过简单模式的关卡可得1分,而遇到困难模式的关卡将扣除1分。Alice从......
  • /bin/sh: ./loophole: not found alpine(ubuntu系统) 安装 loophole 无法安装
     1.查看依赖包执行命令lddloophole (如果提示commandnotfound错误,则先执行后面的2、3后,执行apkaddlibc-bin命令,之后,就可执行lddloophole了)#lddloopholelinux-vdso.so.1(0x00007ffef7db7000)libpthread.so.0=>/lib/x86_64-linux-gnu......
  • 【10-24模拟赛T1】Alice 和璀璨花
    著名的植物学家Alice经过多年的探索,终于找到了传说中的璀璨花。璀璨花的生长速度非常迅猛,如果不加以合适的控制,璀璨花会因为过度内耗而死亡。璀璨花的生长趋势可以用序列\(a\)表示,Alice在研读前人对璀璨花的研究后总结出了一个控制序列\(b\)。Alice需要让璀璨花的生长趋势......
  • 2024-10-13:用go语言,给定一个二进制数组 nums,长度为 n, 目标是让 Alice 通过最少的行动
    2024-10-13:用go语言,给定一个二进制数组nums,长度为n,目标是让Alice通过最少的行动次数从nums中拾取k个1。Alice可以选择任何索引aliceIndex,如果对应的nums[aliceIndex]是1,Alice会拾取一个1并将其设为0。之后,Alice可以选择以下两种行动之一:将一个0变为1(最多执行maxCh......
  • 每日读则推(八)——Alice Weidel‘s speech
    Whogaveyouthepowertogivethepeople'shard-earnedmoneytoeconomicrefugees                                       n.辛苦钱,血汗钱              ......
  • darkhole靶机
    设置靶机与kali为同一网卡,这里设置的为NAT网卡。查看靶机的MAC地址,并使用nmap扫描与kali同一网段内的IP地址nmap192.168.25.0/24扫描出的MAC地址与靶机MAC地址对比,找到靶机IP192.168.25.163紧接着扫描全部端口信息nmap192.168.25.163访问IP的80端口进行信息......
  • 题解:SP9934 ALICE - Alice and Bob
    状态表示:使用两个变量来表示当前游戏的状态:\(a\)表示包含\(1\)个石子的堆的数量,\(b\)表示包含多于\(1\)个石子的堆的可操作次数。游戏策略:从包含多个石子的堆中取走一个石子,这会减少\(b\)。从包含\(1\)个石子的堆中取走一个石子,这会减少\(a\)。合......
  • 题解:UVA1500 Alice and Bob
    状态表示:使用两个变量来表示当前游戏的状态:\(a\)表示包含\(1\)个石子的堆的数量,\(b\)表示包含多于\(1\)个石子的堆的可操作次数。游戏策略:从包含多个石子的堆中取走一个石子,这会减少\(b\)。从包含\(1\)个石子的堆中取走一个石子,这会减少\(a\)。合......
  • Alice and Bod
    AliceandBodAlice和Bob正在玩一个最近兴起的游戏,名为死亡对称,一人进攻一人防守,进攻方可以进攻m次,m次后如果防守成功则防守方获胜,否则进攻方获胜。Alice防守,Bob进攻。具体规则如下,给定一个长度为n的字符串,进攻方Bob每次可以进行如下两种操作的一种。1lr向Ali......
  • CF1592F2-Alice and Recoloring 2-分析、二分图
    link:https://codeforces.com/contest/1592/problem/F2题意:给定一个\(n\)行\(m\)列的目标矩阵,矩阵元素只有W或B,并且你有一个初始矩阵,元素全为W。现在你可以矩阵实施以下操作:使用一块钱,选定一个包含\((1,1)\)的子矩阵,把矩阵中的元素全部反转(W变B,B变W)。使用......