NOIP 2012 第一试 模拟题 魔法树 solution

题意

Solution

压位+前缀和

 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cmath>
 4 #include <algorithm>
 5 #define ll int
 6 using namespace std;
 7 const ll mod=100000007;
 8 inline void read(ll &k)
 9 {
10     ll f=1;char c=getchar();k=0;
11     while (c<‘0‘||c>‘9‘)c==‘-‘&&(f=-1),c=getchar();
12     while (c>=‘0‘&&c<=‘9‘)k=k*10+c-‘0‘,c=getchar();
13     k*=f;
14 }
15 const int maxn=1000010;
16 ll n,q,k,aa,bb,cc;
17 ll last[maxn],next[maxn],tot,c[maxn],to[maxn],sum[maxn];long long cost[233];
18 bool v[maxn];
19 void dfs(ll now,ll fa)
20 {
21     v[now]=1;ll cur=last[now];
22     while (cur)
23     {
24         if (!v[to[cur]])
25         {
26             sum[to[cur]]=sum[now]^(1<<(c[cur]-1));
27             dfs(to[cur],now);
28         }
29         cur=next[cur];
30     }
31 }
32 int main()
33 {
34     freopen("mahou.in","r",stdin);
35     freopen("mahou.out","w",stdout);
36     read(n);read(q);read(k);
37 //    printf("..............qaq%lld%lld%lld\n",n,q,k);
38     for (int i=1;i<n;i++)
39     {
40         read(aa);read(bb);read(cc);
41         to[++tot]=bb;
42         next[tot]=last[aa];
43         last[aa]=tot;
44         c[tot]=cc;
45         to[++tot]=aa;
46         next[tot]=last[bb];
47         last[bb]=tot;
48         c[tot]=cc;
49     }
50     dfs(1,0);
51     for (int i=1;i<=k;i++)scanf("%lld",&cost[i]);
52     ll pp,qq;
53     for (int i=1;i<=q;i++)
54     {
55         long long ans=1;
56         read(pp);read(qq);
57         ll cur=sum[pp]^sum[qq];
58         for (int j=1;j<=k;j++)
59         if (cur&(1<<(j-1)))ans=(long long)((long long)ans*cost[j])%mod;
60         printf("%lld\n",ans%mod);
61     }/*
62     for (int i=1;i<=n;i++){printf("%d ",i);
63     for (int j=1;j<=k;j++)
64     printf("%lld ",sum[i][j]);
65     printf("\n");
66     }*/
67 }

时间: 2024-10-04 22:28:23

NOIP 2012 第一试 模拟题 魔法树 solution的相关文章

扩展欧几里得模板(洛谷1082 同余方程NOIP 2012 提高组 第二天 第一题)

题目描述 求关于 x 的同余方程 ax ≡ 1 (mod b)的最小正整数解. 输入输出格式 输入格式: 输入只有一行,包含两个正整数 a, b,用一个空格隔开. 输出格式: 输出只有一行,包含一个正整数 x0,即最小正整数解.输入数据保证一定有解. 输入输出样例 输入样例#1: 3 10 输出样例#1: 7 说明 [数据范围] 对于 40%的数据,2 ≤b≤ 1,000: 对于 60%的数据,2 ≤b≤ 50,000,000: 对于 100%的数据,2 ≤a, b≤ 2,000,000,000

NOIP 2012 提高组第二试模拟赛 Solution

第一题 题意 数据范围 Solution 三分求下凹函数最值 1 #include <cstdio> 2 #include <queue> 3 #include <iostream> 4 using namespace std; 5 inline void read(int &k) 6 { 7 k=0;int f=1;char c=getchar(); 8 while (c<'0'||c>'9')c=='-'&&(f=-1),c=ge

[BZOJ入门OJ2092][Noip模拟题]舞会

2092: [Noip模拟题]舞会 Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 9  Solved: 5 [Submit][Status][Web Board] Description 学校举行舞会啦,一共有N个人参加,所有人站成一排,从左开始编号,最左边的人编号为1 ,最右边的为N.每个人跳舞的熟练度我们用一个整数表示,第i个人的熟练度为Ai,每次熟 练度最接近的一对相邻男女会出列跳舞,如果有多对那么最左边的那一对会先出列,请你给 出出列跳

九度oj 1437 To Fill or Not to Fill 2012年浙江大学计算机及软件工程研究生机试真题

题目1437:To Fill or Not to Fill 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:1488 解决:345 题目描述: With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way fro

九度oj 1468 Sharing 2012年浙江大学计算机及软件工程研究生机试真题

题目1468:Sharing 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2687 解决:550 题目描述: To store English words, one method is to use linked lists and store a word letter by letter. To save some space, we may let the words share the same sublist if they share the same suffix.

noip模拟题题解集

最近做模拟题看到一些好的题及题解. 升格思想: 核电站问题 一个核电站有N个放核物质的坑,坑排列在一条直线上.如果连续M个坑中放入核物质,则会发生爆炸,于是,在某些坑中可能不放核物质. 任务:对于给定的N和M,求不发生爆炸的放置核物质的方案总数 输入:输入文件只一行,两个正整数N,M( 1<N<50,2≤M≤5) 输出:输出文件只有一个正整数S,表示方案总数. 运用升格思想.设N个坑不会发生爆炸的方案数是f[N],那么我们假设N以前的坑的方案 都已知了,那么我们只需要考虑第N个坑如何放即可(顺

8.22 NOIP 模拟题

  8.22 NOIP 模拟题 编译命令 g++ -o * *.cpp gcc -o * *.c fpc *.pas 编译器版本 g++/gcc 4.9.2 fpc 2.6.2 评测环境 64 位 Linux, 3.3GHZ CPU 评测软件 Lemon 评测方式 忽略行末空格和回车 特别注意:c/c++ 选手使用 printf 输出 64 位整数请使用%lld 1 注意事项 A 债务 文件名                            输入文件             输出文件  

九度oj 1464 Hello World for U 2012年浙江大学计算机及软件工程研究生机试真题

题目1464:Hello World for U 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:3872 解决:1082 题目描述: Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. For example, "helloworld" can be printed as: h    de     ll      rlowo

NOIP 2012 题解

[D1T1vigenere密码] P1778vigenere密码 Accepted 标签:[显示标签] 描述 16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法--Vigenère密码.Vigenère密码的加密解密算法简单易用,且破译难度比较高,曾在美国南北战争中为南军所广泛使用. 在密码学中,我们称需要加密的信息为明文,用M表示:称加密后的信息为密文,用C表示:而密钥是一种参数,是将明文转换为密文或将密文转换为明文的算法中输入的数据,记为k. 在Vigenère