灵异事件

题意

潜入行动「JSOI2018」,但是监听器会监听自己。


思路

本题除了维护最少数量还需要维护方案数量。

子状态\(f[n][0/1/2]\),表示\(n\)被自己、父亲或是儿子控制,\(cnt[n][0/1/2]\)侧表示方案数量。

转移分类讨论:

\(f[now][0]=min(f[to][0],f[to][1],f[to][2])\)

\(cnt[now][0]=被谁转移过来方案就乘以谁\)

\(f[now][1]=min(f[now[1]+min(f[to][0],f[to][1]),f[now][2]+f[to][0])\)

\(cnt[now][1]=被谁转移过来方案就乘以谁\)

\(f[now][2]+=f[to][1]\)

\(cnt[now][2]*=cnt[to][1]\)

代码

#include <bits/stdc++.h>

using namespace std;

namespace StandardIO {

    template<typename T>inline void read (T &x) {
        x=0;T f=1;char c=getchar();
        for (; c<'0'||c>'9'; c=getchar()) if (c=='-') f=-1;
        for (; c>='0'&&c<='9'; c=getchar()) x=x*10+c-'0';
        x*=f;
    }

    template<typename T>inline void write (T x) {
        if (x<0) putchar('-'),x*=-1;
        if (x>=10) write(x/10);
        putchar(x%10+'0');
    }

}

using namespace StandardIO;

namespace Project {
    #define int long long

    const int N=500500;
    const int INF=0x3f3f3f3f;
    const int MOD=1032992941;

    int n;
    int top;
    int head[N];
    struct node {
        int to,next;
    } edge[N<<1];
    int dp[N][3],cnt[N][3],size[N];

    inline void add (int a,int b) {
        edge[++top].to=b,edge[top].next=head[a],head[a]=top;
    }
    void dfs (int now,int fa) {
        dp[now][0]=1,dp[now][1]=n,dp[now][2]=0;
        cnt[now][0]=cnt[now][1]=cnt[now][2]=1;
        for (register int i=head[now]; i; i=edge[i].next) {
            int to=edge[i].to;
            if (to==fa) continue;
            dfs(to,now);
            int val=min(dp[to][0],min(dp[to][1],dp[to][2])),tot=0;
            dp[now][0]=(dp[now][0]+val)%MOD;
            for (register int i=0; i<=2; ++i) if (dp[to][i]==val) tot=(tot+cnt[to][i])%MOD;
            cnt[now][0]=(cnt[now][0]*tot)%MOD;

            val=min(dp[now][1]+min(dp[to][0],dp[to][1]),dp[now][2]+dp[to][0]),tot=0;
            for (register int i=0; i<=1; ++i) if (dp[now][1]+dp[to][i]==val) tot=(tot+cnt[to][i])%MOD;
            cnt[now][1]=(cnt[now][1]*tot)%MOD;
            if (dp[now][2]+dp[to][0]==val) cnt[now][1]=(cnt[now][1]+cnt[now][2]*cnt[to][0]%MOD)%MOD;
            dp[now][1]=val%MOD;

            dp[now][2]=(dp[now][2]+dp[to][1])%MOD;
            cnt[now][2]=(cnt[now][2]*cnt[to][1])%MOD;
        }
    }

    inline void MAIN () {
        read(n);
        for (register int i=1; i<n; ++i) {
            int x,y;
            read(x),read(y);
            add(x,y),add(y,x);
        }
        dfs(1,1);
        int ans=min(dp[1][0],dp[1][1]),tot=0;
        for (register int i=0; i<=1; ++i) if (dp[1][i]==ans) tot=(tot+cnt[1][i])%MOD;
        write(ans),putchar('\n'),write(tot);
    }

    #undef int
}

int main () {
//  freopen(".in","r",stdin);
//  freopen(".out","w",stdout);
    Project::MAIN();
}

原文地址:https://www.cnblogs.com/ilverene/p/11407437.html

时间: 2024-08-05 12:22:43

灵异事件的相关文章

SWUST OJ 东6宿舍灵异事件(0322)

东6宿舍灵异事件(0322) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 88 Accepted: 31 Description 将军听说最近东6闹鬼了,作为一个无神论者,将军当然不相信.但是这个传言已经泛滥了,许多人都在说这个事情,将军从每个人那里听到一个传言,将军可以容易的就知道这个传言是真还是假,但是当一大堆消息组合起来,将军就不知道了,所以将军就找到了你. 提供两种组合方式: A&B:代表A和B都为真的时候,A和B组合

missing message for key 灵异事件

Key words: IE的默认语言若不为简体中文,则会导致此问题发生 刚在某内网服务器(英文 Win2003Server Standard 64Bit)搭建了一套应用(WebLogic11G+Oracle11G),结果我本地访问时报“missing message for key”,第一反应是语言资源文件没放上去,但当时让同事A也访问一下,结果一切正常,再找另一个同事B,还是一切正常,结果我就被BS为人品差……上网查了半天就是说资源文件有问题,少报错的那一项.经查,资源文件肯定是没有任何问题的

android中listview点击事件失效的灵异事件

首先说明一下我想实现的功能: 点击某个item之后,让其颜色发生变化.如果变化网上有很多例子,我就不班门弄斧了.Listview之所以点击没有反应是因为上图中绿色部分(自己定义的一个继承BaseAdapter的adapter来适应listview)将listview的item覆盖了.现在点击的只是自定义的adapter中的convertView. 其次,自定义的adapter中包含一个ImageView和二个TextView.代码如下: <?xml version="1.0" e

MySQL 灵异事件一则 -- desc报语法错误

今天有一开发同学找到我,说查询SQL中倒序报错,不明原因,于是奔赴工位现场研究情况. 果然,只要SQL中带有desc 就会报错,而ASC没问题. 哪怕desc放在句首用作explain也会报错. 报错信息为语法错误... 检查了sql-mode发现是空,看来不是这个原因,那问题出在哪呢? 测试库的环境是保存在windows个人电脑中的,开发MM说,以前没遇到过这个情况,但是最近为了图省事,在windows的msconfig中配置了MySQL开机启动,然后就这样了. 于是shutdown数据库,手

灵异事件之:Android Studio 3.4提示:Error running app: Default Activity Not Found

本次事件尚未解决,如果有手法独特的大神,请在评论区开车. 问题症状:之前在AS上能好好运行的项目,楼主一不小心,把AS的版本更新到3.4之后,所有项目都是能通过编译,但是运行处依然提示红叉.Event log显示:Error running 'app': Default Activity not found. 网上大部分解决方法: AndroidManifest.xml里的activity name包名没有完善 原本是默认为android:name=".MainActivity" 网友

写代码遇到的灵异事件

1. 问题表现 消息 102,级别 15,状态 1,过程 wx_kaliushui,第 8 行'GO' 附近有语法错误. 为了说明问题,我把代码精简到极致,如下: 2. 排查过程 2.1. 去掉注释部分,问题解决 2.2. 去掉GO,问题解决 2.3. 注释掉GO,问题解决 2.4. 将代码全选复制到qq聊天记录,然后再全选复制回MSSMS,问题解决 2.5. 将代码复制到虚拟机的MSSMS,问题解决 且慢!GO前面的回车符号哪里去了? 2.6. 将代码保存成文件,然后用记事本打开 且慢+1 !

[Swust OJ 322]--东6宿舍灵异事件(中缀表达式转化为后缀表达式的简单运用)

题目链接:http://acm.swust.edu.cn/problem/322/ Time limit(ms): 1000 Memory limit(kb): 65535 Description 将军听说最近东6闹鬼了,作为一个无神论者,将军当然不相信.但是这个传言已经泛滥了,许多人都在说这个事情,将军从每个人那里听到一个传言,将军可以容易的就知道这个传言是真还是假,但是当一大堆消息组合起来,将军就不知道了,所以将军就找到了你. 提供两种组合方式: A&B:代表A和B都为真的时候,A和B组合起

用MsmqBinding投送message出现的一个灵异事件 【第二篇】

一直都在用Msmqbinding,也一直忽视了message里面的内容格式是什么样的,这也是微软给我们高层封装带给我们的开发效率,但同时一旦中间出了什么问题, 就不知道从何查起了.有个需求是这样的,服务端和客户端采用离线连接,也就是消息队列模式,server接收端在处理消息的时候,要根据一定的逻辑,如果该消息不 满足规则,就把消息原样的丢回消息队列中,问题就出现在这里...消息丢进去了,然后,然后就tmd的飞走了!!!先快速的看下代码. 一:示例代码 1.server端 1 public voi

记一次2000端口灵异事件

前段时间配合开发在测试环境和生存环境搭建一套tomcat中间件应用,启动了2000和2001端口,在测试环境验证都是正常,但是在生产环境中发现2000端口的前端请求一直在转圈没有返回. 具体访问链路请求如下: 办公网  ==>  域名(pms.panet.com.cn 绑定f5 vip)==> SF区域机器(10.47.115.12)==> 其他系统模块 具体现象如下: pms.panet.com.cn:2001/proxy/index.html 2001端口可以访问,tomcat有日志