首页 > 代码库 > ural 2030
ural 2030
Awesome Backup System
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uDescription
It is known that all people can be divided into two groups: those who have never lost important data and those who regularly perform data backups. Kirill is on his way from the first group to the second after the incident with tests described in the problem “ Another Dress Rehearsal”. Not satisfied with the existing data backup solutions for various reasons, he decided to design his own backup system. He chose a simple but proud name for it: the “Awesome Backup System,” ABS for short. Since errors in such an important system are absolutely unacceptable, Kirill asks you to test the beta version of his product.
The ABS is organized as follows: let there be n computers in a local network. The computers are numbered with integers from 1 to n. Some pairs of computers are connected by cables. For economy, the network doesn’t have unnecessary cables, which means that there is a unique cable path between any two computers. Initially there are ai bytes of information written on the i-th computer. The ABS can process two types of requests:
- Copy all the information from computer v to all adjacent computers (i.e., to all computers directly connected to it by a cable) If computer v had xv bytes of information, then, after copying, all adjacent computers will have xv bytes of information more, while computer v will still have xv bytes of information.
- Output the current amount of information on computer v. Since this amount can grow very quickly, output the remainder of its division by the number 109 + 7.
Input
The first line contains the number n of computers in the network (1 ≤ n ≤ 10 5). In the second line you are given integers a1, …, an, which are the amounts of information (in bytes) on the computers at the initial time (0 ≤ ai ≤ 10 9). Each of the following n ? 1 lines contains integers x and y (1 ≤ x, y ≤ n; x ≠ y), which mean that the computers with numbers x and y are connected by a cable. It is guaranteed that the network is connected.
The next line contains the number m of requests to the system (1 ≤ m ≤ 10 5). In the following m lines you are given the requests in the order of their execution. Each request is a pair of integers t and v (1 ≤ t ≤ 2 and 1 ≤ v ≤ n), where t specifies the type of the request and vis the number of the computer to which the request is applied.
Output
For each request of the second type, output in a separate line the remainder of the division of the answer by the number 10 9 + 7.
Sample Input
input | output |
---|---|
4 1 1 1 1 1 2 1 3 2 4 9 2 1 2 2 2 3 2 4 1 1 2 1 2 2 2 3 2 4 | 1 1 1 1 1 2 2 1 |
2 1 1 1 2 14 2 2 2 1 1 1 2 2 1 2 2 1 1 1 2 2 1 2 2 1 1 1 2 2 1 2 2 1 | 1 1 2 3 5 8 13 21 |
对一棵树进行下列操作
1 v 将顶点v的邻接顶点的权值加上w[v]
2 v 查询顶点v的权值
哎,还是太弱了,这题不需要任何数据结构,只需要先将树转换成有根树,开一个标记数组add,add[v]表示给v的邻接顶点增加了add[v],在进行1操作的时候,直接将v的父亲加上v的权值,则查询的时候只有父亲对他有影响,加上父亲的add标记就行
/************************************************************************* > File Name: Spaly.cpp > Author: acvcla > QQ: > Mail: acvcla@gmail.com > Created Time: 2014年11月16日 星期日 00时14分26秒 ************************************************************************/ #include<iostream> #include<algorithm> #include<cstdio> #include<vector> #include<cstring> #include<map> #include<queue> #include<stack> #include<string> #include<cstdlib> #include<ctime> #include<set> #include<math.h> using namespace std; typedef long long LL; const int maxn = 1e5 + 100; #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define pb push_back vector<int>G[maxn]; LL A[maxn],add[maxn]; const int mod=1e9+7; int p[maxn]; void dfs(int u,int fa) { p[u]=fa; for(int i=0; i<G[u].size(); i++) { int &v=G[u][i]; if(v!=fa&&v!=u) { dfs(v,u); } } } int main() { int n,m; cin>>n; rep(i,0,n)G[i].clear(); rep(i,1,n)cin>>A[i]; int u,v; rep(i,1,n-1) { cin>>u>>v; G[u].pb(v); G[v].pb(u); } cin>>m; memset(add,0,sizeof add); memset(p,0,sizeof p); dfs(1,0); while(m--) { cin>>u>>v; int x=p[v]; if(u==1) { add[v]=(add[v]+A[v]+add[x])%mod; A[x]=(A[x]+A[v]+add[x])%mod; } else cout<<(A[v]+add[x])%mod<<endl; } return 0; }
ural 2030
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。