这题的思路没什么好说的,反正我是暴力,但暴力中有需要注意的细节。我指的是白白,大神可以直接飞走。
首先看个map的。
<span style="font-size:18px;">#include<iostream>
#include<vector>
#include<map>
using namespace std;
map<int,int> mapp;
int b[100001];
int main()
{
int t;
cin>>t;
while(t--)
{
mapp.clear();
int n,m;
cin>>n>>m;
for(int i=0;i<=n;i++)
{
b[i]=0;
}
int x,y;
while(m--)
{
cin>>x>>y;
mapp[x]=y;
mapp[y]=x;
}
int q,yy;
int aa,bb;
cin>>q;
while(q--)
{
cin>>yy;
if(yy==0)
{
cin>>aa>>bb;
b[aa]+=bb;
}
else
{
cin>>aa;
int sum=0;
map<int,int>::iterator iter;
iter=mapp.find(aa);
for(int k=0;k!=mapp.count(aa);k++,iter++)
{
sum+=b[iter->second];
}
cout<<sum<<endl;
}
}
}
return 0;
}</span>
真是超时没商量,所以,以后能暴力的题要注意了,不要懒,自己写才是真爱(貌似用map也没简单)。再看个vector的
<span style="font-size:18px;">#include<iostream>
#include<vector>
#include<cstdio>
using namespace std;
vector<int> a[100001];
int b[100001];
int main()
{
int t;
int n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++)
{
b[i]=0;
a[i].clear();
}
int x,y;
while(m--)
{
scanf("%d%d",&x,&y);
a[x].push_back(y);
a[y].push_back(x);
}
int q,yy,aa,bb;
scanf("%d",&q);
while(q--)
{
scanf("%d",&yy);
if(!yy)
{
scanf("%d%d",&aa,&bb);
b[aa]+=bb;
}
else
{
scanf("%d",&aa);
int sum=0;
for(int i=0;i!=a[aa].size();i++)
{
sum+=b[a[aa][i]];
}
printf("%d\n",sum);
}
}
}
return 0;
}</span>
因为没看过vector和map的源码,暂时还不知道时间都费到哪了。其实最直接的想法是邻接表a[][]。没办法,这么大数据,果断溢出,这才想到了 vector。不管你信不信,把上面代码的输入输出改为cin和cout,果断还是超时。