JZOJ 5833. 【省选模拟8.20】Endless Fantasy

2023-10-29 22:11

本文主要是介绍JZOJ 5833. 【省选模拟8.20】Endless Fantasy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

中二少年cenbo幻想自己统治着Euphoric Field。由此他开始了Endless Fantasy。

Euphoric Field有n座城市,m个民族。这些城市之间由n-1条道路连接形成了以城市1为根的有根树。

每个城市都是某一民族的聚居地,cenbo知道第i个城市的民族是A_i,人数是B_i。

为了维护稳定,cenbo需要知道某个区域内人数最多的民族。

他向你提出n个询问,其中第i个询问是:求以i为根的子树内,人数最多的民族有是哪个,这个民族有多少人。

如果子树内人数最多的民族有多个,输出其中编号最小的民族。

30%的数据,n<=1000;

60%的数据,n<=40000;

100%的数据,n<=400000,m<=n,1<=A_i<=m,0<=B_i<=1000。

题意有歧义吧……$b_i=0$想干啥……

题意:问子树众数

题解:直接dsu on tree

此题加强:loj 6290

  1 %:pragma GCC optimize(2)
  2 %:pragma GCC optimize(3)
  3 %:pragma GCC optimize("Ofast")
  4 %:pragma GCC optimize("inline")
  5 %:pragma GCC optimize("-fgcse")
  6 %:pragma GCC optimize("-fgcse-lm")
  7 %:pragma GCC optimize("-fipa-sra")
  8 %:pragma GCC optimize("-ftree-pre")
  9 %:pragma GCC optimize("-ftree-vrp")
 10 %:pragma GCC optimize("-fpeephole2")
 11 %:pragma GCC optimize("-ffast-math")
 12 %:pragma GCC optimize("-fsched-spec")
 13 %:pragma GCC optimize("unroll-loops")
 14 %:pragma GCC optimize("-falign-jumps")
 15 %:pragma GCC optimize("-falign-loops")
 16 %:pragma GCC optimize("-falign-labels")
 17 %:pragma GCC optimize("-fdevirtualize")
 18 %:pragma GCC optimize("-fcaller-saves")
 19 %:pragma GCC optimize("-fcrossjumping")
 20 %:pragma GCC optimize("-fthread-jumps")
 21 %:pragma GCC optimize("-funroll-loops")
 22 %:pragma GCC optimize("-fwhole-program")
 23 %:pragma GCC optimize("-freorder-blocks")
 24 %:pragma GCC optimize("-fschedule-insns")
 25 %:pragma GCC optimize("inline-functions")
 26 %:pragma GCC optimize("-ftree-tail-merge")
 27 %:pragma GCC optimize("-fschedule-insns2")
 28 %:pragma GCC optimize("-fstrict-aliasing")
 29 %:pragma GCC optimize("-fstrict-overflow")
 30 %:pragma GCC optimize("-falign-functions")
 31 %:pragma GCC optimize("-fcse-skip-blocks")
 32 %:pragma GCC optimize("-fcse-follow-jumps")
 33 %:pragma GCC optimize("-fsched-interblock")
 34 %:pragma GCC optimize("-fpartial-inlining")
 35 %:pragma GCC optimize("no-stack-protector")
 36 %:pragma GCC optimize("-freorder-functions")
 37 %:pragma GCC optimize("-findirect-inlining")
 38 %:pragma GCC optimize("-fhoist-adjacent-loads")
 39 %:pragma GCC optimize("-frerun-cse-after-loop")
 40 %:pragma GCC optimize("inline-small-functions")
 41 %:pragma GCC optimize("-finline-small-functions")
 42 %:pragma GCC optimize("-ftree-switch-conversion")
 43 %:pragma GCC optimize("-foptimize-sibling-calls")
 44 %:pragma GCC optimize("-fexpensive-optimizations")
 45 %:pragma GCC optimize("-funsafe-loop-optimizations")
 46 %:pragma GCC optimize("inline-functions-called-once")
 47 %:pragma GCC optimize("-fdelete-null-pointer-checks")
 48 
 49 #include <bits/stdc++.h>
 50 
 51 using namespace std;
 52 
 53 typedef long long ll;
 54 
 55 const int N = 4e5 + 10;
 56 
 57 int n, m;
 58 
 59 int head[N], rest[2 * N], to[2 * N], tot;
 60 
 61 int sz[N], son[N], cnt[N];
 62 
 63 int a[N], b[N];
 64 
 65 int zui_duo_de_min_zu[N], min_zu_de_ren_shu[N];
 66 
 67 int ans;
 68 
 69 void add(int u, int v) { to[++ tot] = v, rest[tot] = head[u], head[u] = tot; }
 70 
 71 void dfs(int u, int fa) {
 72     sz[u] = 1;
 73     for(int i = head[u] ; i ; i = rest[i]) {
 74         int v = to[i];
 75         if(v == fa) continue;
 76         dfs(v, u);
 77         sz[u] += sz[v];
 78         if(sz[v] > sz[son[u]]) son[u] = v;
 79     }
 80 }
 81 
 82 void ins(int u) {
 83     cnt[a[u]] += b[u];
 84     int ct = cnt[a[u]];
 85     if(ans == 0 || cnt[ans] < ct || (cnt[ans] == ct && ans > a[u])) ans = a[u];
 86 }
 87 
 88 void push(int u, int fa, int type) {
 89     if(type == 0) ins(u);
 90     else cnt[a[u]] = 0;
 91     for(int i = head[u] ; i ; i = rest[i]) {
 92         int v = to[i];
 93         if(v == fa) continue;
 94         push(v, u, type);
 95     }
 96 }
 97 
 98 void sol(int u, int fa) {
 99     for(int i = head[u] ; i ; i = rest[i]) {
100         int v = to[i];
101         if(v == son[u] || v == fa) continue;
102         sol(v, u);
103         push(v, u, 1);
104         ans = 0;
105     }
106     ans = 0;
107 
108     if(son[u]) sol(son[u], u);
109 
110     ins(u);
111     for(int i = head[u] ; i ; i = rest[i]) {
112         int v = to[i];
113         if(v == son[u] || v == fa) continue;
114         push(v, u, 0);
115     }
116 
117     zui_duo_de_min_zu[u] = ans;
118     min_zu_de_ren_shu[u] = cnt[ans];
119 }
120 
121 void read(int &x) {
122     char c = x = 0;
123     while(!isdigit(c)) c = getchar();
124     while(isdigit(c)) x = x * 10 + c - '0', c = getchar();
125 }
126 
127 int main() {
128 //    freopen("data.in", "r", stdin);
129     freopen("endless.in", "r", stdin);
130     freopen("endless.out", "w", stdout);
131     read(n), read(m);
132     for(int i = 1, u, v ; i < n ; ++ i) {
133         read(u), read(v);
134         add(u, v), add(v, u);
135     }
136     for(int i = 1 ; i <= n ; ++ i) read(a[i]), read(b[i]);
137     dfs(1, 0);
138     sol(1, 0);
139     for(int i = 1 ; i <= n ; ++ i) {
140         printf("%d %d\n", zui_duo_de_min_zu[i], min_zu_de_ren_shu[i]);
141     }
142 }
JZOJ 5833. 【省选模拟8.20】Endless Fantasy

转载于:https://www.cnblogs.com/KingSann/articles/9507878.html

这篇关于JZOJ 5833. 【省选模拟8.20】Endless Fantasy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/303687

相关文章

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

usaco 1.2 Transformations(模拟)

我的做法就是一个一个情况枚举出来 注意计算公式: ( 变换后的矩阵记为C) 顺时针旋转90°:C[i] [j]=A[n-j-1] [i] (旋转180°和270° 可以多转几个九十度来推) 对称:C[i] [n-j-1]=A[i] [j] 代码有点长 。。。 /*ID: who jayLANG: C++TASK: transform*/#include<

hdu4431麻将模拟

给13张牌。问增加哪些牌可以胡牌。 胡牌有以下几种情况: 1、一个对子 + 4组 3个相同的牌或者顺子。 2、7个不同的对子。 3、13幺 贪心的思想: 对于某张牌>=3个,先减去3个相同,再组合顺子。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOExcepti

HDU 5833 高斯消元

n个数,任选>=1个数相乘,使得乘积是完全平方数。 其实就是开关,控制灯泡。 数 ----第i个质因子p的个数%2  = {1 , 0} == 开关----第i个灯泡 = {开 , 关} 最后使得所有灯泡都是灭着的方案数 = 2^自由变元个数   全部关着的情况     ==   一个数也不选   应省去 import java.io.BufferedReader;

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

【算法专场】模拟(下)

目录 前言 38. 外观数列 算法分析 算法思路 算法代码 1419. 数青蛙 算法分析 算法思路 算法代码  2671. 频率跟踪器 算法分析 算法思路 算法代码 前言 在前面我们已经讲解了什么是模拟算法,这篇主要是讲解在leetcode上遇到的一些模拟题目~ 38. 外观数列 算法分析 这道题其实就是要将连续且相同的字符替换成字符重复的次数+

模拟实现vector中的常见接口

insert void insert(iterator pos, const T& x){if (_finish == _endofstorage){int n = pos - _start;size_t newcapacity = capacity() == 0 ? 2 : capacity() * 2;reserve(newcapacity);pos = _start + n;//防止迭代

PHP实现二叉树遍历(非递归方式,栈模拟实现)

二叉树定义是这样的:一棵非空的二叉树由根结点及左、右子树这三个基本部分组成,根据节点的访问位置不同有三种遍历方式: ① NLR:前序遍历(PreorderTraversal亦称(先序遍历)) ——访问结点的操作发生在遍历其左右子树之前。 ② LNR:中序遍历(InorderTraversal) ——访问结点的操作发生在遍历其左右子树之中(间)。 ③ LRN:后序遍历(PostorderT

1 模拟——67. 二进制求和

1 模拟 67. 二进制求和 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1:输入:a = "11", b = "1"输出:"100"示例 2:输入:a = "1010", b = "1011"输出:"10101" 算法设计 可以从低位到高位(从后向前)计算,用一个变量carry记录进位,如果有字符没处理完或者有进位,则循环处理。两个字符串对