標籤:des style blog http color io os java ar
專案管理
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1013 Accepted Submission(s): 360
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 Input13 21 21 360 1 150 3 41 11 30 2 331 2
Sample Output41515
AuthorCLJ
Source BestCoder Round #1 代碼:
1 #pragma comment(linker, "/STACK:1024000000,1024000000") 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<vector> 6 using namespace std; 7 const int maxn=100005; 8 vector<vector<int> >arr; 9 //vector<int>arr[maxn];10 int ans[maxn];11 int n,m,i;12 int main(){13 int cas,a,b,q,cmd,u,v;14 scanf("%d",&cas);15 while(cas--){16 scanf("%d%d",&n,&m);17 arr.clear();18 arr.resize(n+1);19 memset(ans,0,sizeof(int)*(n+1));20 for(i=0;i<m;i++){21 scanf("%d%d",&a,&b);22 arr[b].push_back(a);23 arr[a].push_back(b);24 }25 scanf("%d",&q);26 while(q--){27 scanf("%d",&cmd);28 if(cmd==1){29 scanf("%d",&u);30 printf("%d\n",ans[u]);31 }32 else{33 scanf("%d%d",&u,&v);34 int len=arr[u].size();35 for(i=0;i<len;i++)36 ans[arr[u][i]]+=v;37 }38 }39 //for(i=1;i<=n;i++)arr[i].clear();40 }41 return 0;42 }View Code
最佳化之後:
1 //#pragma comment(linker,"\STACK:1024000000,1024000000"); 2 #include<cstdio> 3 #include<cstring> 4 #include<cstdlib> 5 #include<vector> 6 using namespace std; 7 const int maxn=100005; 8 vector<int>arr[maxn]; 9 int ans[maxn];10 int n,m,i;11 int main(){12 int cas,a,b,q,cmd,u,v;13 scanf("%d",&cas);14 while(cas--){15 scanf("%d%d",&n,&m);16 memset(ans,0,sizeof(int)*(n+1));17 for(i=0;i<m;i++){18 scanf("%d%d",&a,&b);19 arr[b].push_back(a);20 arr[a].push_back(b);21 }22 scanf("%d",&q);23 while(q--){24 scanf("%d",&cmd);25 if(cmd==1){26 scanf("%d",&u);27 printf("%d\n",ans[u]);28 }29 else{30 scanf("%d%d",&u,&v);31 int len=arr[u].size();32 for(i=0;i<len;i++)33 ans[arr[u][i]]+=v;34 }35 }36 //for(i=1;i<=n;i++)arr[i].clear();37 }38 return 0;39 }View Code
HDU-----(4858)專案管理(類比)