標籤:des style java color strong 資料
專案管理
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 0 Accepted Submission(s): 0
Problem Description
我們建造了一個大項目!這個項目有n個節點,用很多邊串連起來,並且這個項目是連通的!兩個節點間可能有多條邊,不過一條邊的兩端必然是不同的節點。每個節點都有一個能量值。現在我們要編寫一個專案管理軟體,這個軟體呢有兩個操作:1.給某個項目的能量值加上一個特定值。2.詢問跟一個項目相鄰的項目的能量值之和。(如果有多條邊就算多次,比如a和b有2條邊,那麼詢問a的時候b的權值算2次)。
Input
第一行一個整數T(1 <= T <= 3),表示測試資料的個數。然後對於每個測試資料,第一行有兩個整數n(1 <= n <= 100000)和m(1 <= m <= n + 10),分別表示點數和邊數。然後m行,每行兩個數a和b,表示a和b之間有一條邊。然後一個整數Q。然後Q行,每行第一個數cmd表示操作類型。如果cmd為0,那麼接下來兩個數u v表示給項目u的能量值加上v(0 <= v <= 100)。如果cmd為1,那麼接下來一個數u表示詢問u相鄰的項目的能量值之和。所有點從1到n標號。
Output
對每個詢問,輸出一行表示答案。
Sample Input
13 21 21 360 1 150 3 41 11 30 2 331 2
Sample Output
41515
水題,直接類比一遍過程就行了。
#include <stdio.h>#include <vector>#include <string.h>#define maxn 100002using namespace std;vector<int> vec[maxn];vector<int>::iterator it;int val[maxn];int getVal(int k){ int sum = 0; for(it = vec[k].begin(); it != vec[k].end(); ++it) sum += val[*it]; return sum;}int main(){ int t, n, m, i, a, b, q, com; scanf("%d", &t); while(t--){ scanf("%d%d", &n, &m); memset(vec, 0, sizeof(vec)); memset(val, 0, sizeof(val)); for(i = 1; i <= m; ++i){ scanf("%d%d", &a, &b); vec[a].push_back(b); vec[b].push_back(a); } scanf("%d", &q); while(q--){ scanf("%d%d", &com, &a); if(com == 1) printf("%d\n", getVal(a)); else{ scanf("%d", &b); val[a] += b; } } } return 0;}