CodeForces 505BMr. Kitayuta's Colorful Graph
来源:互联网 发布:水果店会员卡软件 编辑:程序博客网 时间:2024/06/06 03:30
关于昨晚的B题
正常说,水题,深搜或者并查集都能做
然而
是谁说过看了看数据觉得能做就敲代码了。
要保存错误现场的代码
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<set>#include<algorithm>using namespace std;/*struct edge{ int u; int v; int color; public: friend operator <};*/ int color[105][105]; int n,m,q; vector<int> s[105]; int getf(int c,int v){ if(color[c][v]==0||color[c][v]==v) { color[c][v]=v; return v; } else color[c][v]=getf(c,color[c][v]); return color[c][v]; } void merge(int c,int u,int v){ int a=getf(c,u); int b=getf(c,v); color[c][b]=color[c][a]; }int main(){ int a,b,c; cin>>n>>m; for(int i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&c); merge(c,a,b); s[a].push_back(c); s[b].push_back(c); } /* for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cout<<color[i][j]<<" "; } cout<<endl; }*/ cin>>q; int sum; for(int i=0;i<q;i++){ scanf("%d%d",&a,&b); sum=0; int s1=s[a].size(); int s2=s[b].size(); if(s1<=s2){ for(int i=0;i<s[a].size();i++){ int c=s[a][i]; if(getf(c,a)==getf(c,b)){ sum++; } } printf("%d\n",sum); } else{ for(int i=0;i<s[b].size();i++){ int c=s[b][i]; if(getf(c,a)==getf(c,b)){ sum++; } } printf("%d\n",sum); } //for(int i=0;i) } return 0;}
虽说是水题,一直觉得自己按颜色分类然后并查集很对啊,很完美,不知道代码哪里敲错了,原来没分析好题
set有毒
乾神跟我说每个节点的颜色有重复,然后我想那我按照原先用set存储就不会有重了,可是实现的时候我忘了为什么用set就改了vector好实现
此时乾神又跟我我说其实可以映射不用set~
不死心的继续改用set结果超时了
set有毒,可以参见下图
2016-05-17 15:46:31若静,l1-3的字符串b你用的数据结构是什么Desperado 16:26:311看了一眼就没思路就没做Desperado 16:26:393我看看着Desperado 16:28:36就是setDesperado 16:29:18判断字符是否存在集合里 16:48:27好的,知道了。这是个数据结构题。直接数组映射就可以。我看你提交了两次。l2-4就是递推。Desperado 16:49:16第一次格式错了Desperado 16:50:22恩,库函数用多了就总习惯性的用 16:53:01看起来要讨论下。这次题着重基本。
最终还是用映射ac
#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<set>#include<algorithm>using namespace std;/*struct edge{ int u; int v; int color; public: friend operator <};*/ int color[105][105]; int n,m,q; int s[105][105]; int getf(int c,int v){ if(color[c][v]==0||color[c][v]==v) { color[c][v]=v; return v; } else color[c][v]=getf(c,color[c][v]); return color[c][v]; } void merge(int c,int u,int v){ int a=getf(c,u); int b=getf(c,v); color[c][b]=color[c][a]; }int main(){ int a,b,c; cin>>n>>m; for(int i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&c); merge(c,a,b); s[a][c]=1; s[b][c]=1; } /* for(int i=1;i<=m;i++){ for(int j=1;j<=n;j++){ cout<<color[i][j]<<" "; } cout<<endl; }*/ cin>>q; int sum; for(int i=0;i<q;i++){ scanf("%d%d",&a,&b); sum=0; { for(int i=1;i<=100;i++){ if(s[a][i]){ int c=i; if(getf(c,a)==getf(c,b)){ sum++; } } } printf("%d\n",sum); } //for(int i=0;i) } return 0;}
一个会莫名纠结的女子
重新开始记录我的生活
0 0
- CodeForces 505BMr. Kitayuta's Colorful Graph
- Codeforces 505B - Mr. Kitayuta's Colorful Graph (DFS)
- codeforces 505B B. Mr. Kitayuta's Colorful Graph(bfs)
- Codeforces 505B __Mr. Kitayuta's Colorful Graph(floyd)
- CodeForces-505B-Mr. Kitayuta's Colorful Graph(弗洛伊德)
- codeforces 505B Mr. Kitayuta's Colorful Graph
- codeforces 505B Mr. Kitayuta's Colorful Graph
- Mr. Kitayuta's Colorful Graph CodeForces
- Mr. Kitayuta's Colorful Graph
- Mr. Kitayuta's Colorful Graph
- [Codeforces Round #286 DIV1D (CF506D)] Mr. Kitayuta's Colorful Graph
- Codeforces 505B. Mr. Kitayuta's Colorful Graph 并查集
- codeforces 505B B. Mr. Kitayuta's Colorful Graph-爆搜/DP
- 【种类并查集】codeforces 505B Mr. Kitayuta's Colorful Graph
- CF 505B Mr. Kitayuta's Colorful Graph(最短路)
- B. Mr. Kitayuta's Colorful Graph
- 506D Mr. Kitayuta's Colorful Graph
- B - Mr. Kitayuta's Colorful Graph
- C#Winform判断DataGridView中的checkbox列是否选中
- Git的简单操作(1)
- 什么是委托
- Java注解认识
- HANA数据库为何如此之快
- CodeForces 505BMr. Kitayuta's Colorful Graph
- Linux2.6进程切换经典分析
- Android动画
- Android Service学习之AIDL, Parcelable和远程服务
- android 6.0 vold shutdown流程
- ExecutorService的execute和submit方法区别
- Android Studio目录结构浅析
- C#线程池多线程Socket通讯 服务器端和客户端示例
- find