hdu 4858 水题

题意:我们建造了一个大项目!这个项目有n个节点,用很多边连接起来,并且这个项目是连通的!两个节点间可能有多条边,不过一条边的两端必然是不同的节点。每个节点都有一个能量值。
现在我们要编写一个项目管理软件,这个软件呢有两个操作:

1.给某个项目的能量值加上一个特定值。
2.询问跟一个项目相邻的项目的能量值之和。(如果有多条边就算多次,比如a和b有2条边,那么询问a的时候b的权值算2次)。

链接:点我

暴力过

 1 #include<cstdio>

 2 #include<iostream>

 3 #include<algorithm>

 4 #include<cstring>

 5 #include<cmath>

 6 #include<queue>

 7 #include<map>

 8 using namespace std;

 9 #define MOD 1000000007

10 #define pb(a) push_back(a)

11 const int INF=0x3f3f3f3f;

12 const double eps=1e-5;

13 typedef long long ll;

14 #define cl(a) memset(a,0,sizeof(a))

15 #define ts printf("*****\n");

16 const int MAXN=100005;

17 int val[MAXN];

18 int n,m,tt,cnt;

19 vector<int> vc[MAXN];

20 int main()

21 {

22     int i,j,k;

23     #ifndef ONLINE_JUDGE

24     freopen("1.in","r",stdin);

25     #endif

26     scanf("%d",&tt);

27     while(tt--)

28     {

29         scanf("%d%d",&n,&m);

30         int a,b;

31         for(i=0;i<=n;i++)

32         {

33             vc[i].clear();

34         }

35         for(i=0;i<m;i++)

36         {

37             scanf("%d%d",&a,&b);

38             vc[a].pb(b);

39             vc[b].pb(a);

40         }

41         for(i=0;i<=n;i++)   val[i]=0;

42         scanf("%d",&k);

43         while(k--)

44         {

45             int f,id,w;

46             scanf("%d",&f);

47             if(f==0)

48             {

49                 scanf("%d%d",&id,&w);

50                 val[id]+=w;

51             }

52             else

53             {

54                 scanf("%d",&w);

55                 int sum=0;

56                 for(i=0;i<vc[w].size();i++)

57                 {

58                     sum+=val[vc[w][i]];

59                 }

60                 printf("%d\n",sum);

61             }

62         }

63     }

64 }

 

你可能感兴趣的:(HDU)