hdu4858

来源:互联网 发布:旅行商问题的退火算法 编辑:程序博客网 时间:2024/06/15 19:49

这题的思路没什么好说的,反正我是暴力,但暴力中有需要注意的细节。我指的是白白,大神可以直接飞走。

首先看个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,果断还是超时。


0 0
原创粉丝点击