[FZYZOJ 2106] 备份数据

P2106 -- 备份数据

时间限制:250MS

内存限制:1024KB

Description

其实,在PXT想办法逃出机房的时候,CJK已经知道了事情的经过。整个一中的所有服务器受到了黑客的攻击,这些黑客的目的很明显——毁掉所有的成绩数据。如果成绩丢失,所有学生将会面临在寒假重新参加所有科目的考试!那将是多大的损失!看着座位旁堆得高高的书本,CJK决定拼尽全力,将数据备份下来。

风,轻轻地略过总控制室,带着沙沙的令人有一丝寒意的雨丝。光是服务器,就有50万台,每一台都存着几百G的数据……CJK不敢想了。如何把这些数据备份起来呢?

突然,他眼角瞥到一个小相框——那是他的好基友X。他们曾经无话不谈,可现在却天各一方……CJK将相框反过来,他惊奇的发现——相框的背面写着的,竟是他们以前上课无聊时,随口谈起的数据备份法。而X,竟然把它具体化了——CJK不禁泪流满面……

根据X的理论体系,把N台服务器构成树形结构,每一台服务器都有一个“父亲”和一个“数据关键字”。每个服务器的数据关键字由数据经过很强的压缩得到,都在2^32以内。当CJK执行“备份”指令的时候,从距离CJK(0号服务器)最远的服务器开始,每一台服务器通过“推送操作”:将父亲的数据关键字加上自己的数据关键字,来完成数据传输,将自己的数据移动到父亲服务器。也就是说,这是这样的一个操作:

Data[Father[i]] += Data[i];

当然,一台服务器只有自己的儿子都推送完成,才能向自己的父亲推送,所以是按照深度从大到小的顺序推送。这样一层一层上去,最后数据会汇总到CJK的服务器(编号为0,数据关键字初始为0)里。由于绝妙的压缩方式,那几千几万的数据变为一个小小的整数,一中有救了!CJK需要这个数据对2^32取模(求余)的结果,他只需要用这个数就能恢复出所有数据。

突然,CJK发现自己不能动弹了。黑客已经趁CJK陷入回忆的那一瞬间,将CJK控制锁定。时间和内存都所剩无几,CJK希望你能帮他完成这项艰巨的任务。

让我们帮助CJK,一起备份数据,解放寒假!

Input Format

第一行一个整数N,表示N台服务器。

下面N行,每行N个整数,第i行表示编号为i的服务器。

每一行两个整数,分别表示第i个服务器的父亲和数据关键字。

Output Format

一个整数,表示CJK需要的数字。

Sample Input

1
0 0

Sample Output

0

Hint

40:N <= 100

100: N <= 500 000

【题解】其实嘛,就是把所有的数据加在一起而已

而且发现数据规模非常小,没必要取模。

于是很快AC了。。。

1 #include<bits/stdc++.h>
2 using namespace std;
3 int main() {
4     int a,b,c=0;
5     scanf("%d",&a);
6     while(a--) {scanf("%*d%d",&b);c+=b;}
7     printf("%u
",c);
8     return 0;
9 }
View Code
这篇文章由TonyFang发布。 所有解释权归TonyFang所有。 Mailto: tony-fang@map-le.net
原文地址:https://www.cnblogs.com/TonyNeal/p/fzyzoj2106.html