B. Mr. Kitayuta's Colorful Graph,二维并查集,一个简单变形就可以水过了~~
B. Mr. Kitayuta's Colorful Graph
-> Link
<-
题目链接在上面,题目比较长,就不贴出来了,不过这是道很好的题,很多方法都可以做,真心邀请去A了这道题;
题意:n个顶点m条边的无向图,每输入的两个点之间可能有多种颜色连接在一起,然后查询时每输入两个点,问这两个点之间有多少条连接方式;
如图:
1代表红色,2代表蓝色,3代表绿色;
这样3和4之间就是用绿色连接在一起的,他们之间只有一种连接方式,而2和3之间就有两种连接方式了,1和3只有一种(通过红色连接);
题目就是求两个点之间有多少种连接方式;
思路: 一个并查集的变形,当时做的时候想,这不是一个单纯的并查集,通过不同的颜色判断是否联通;那我们怎么来处理这多种颜色呢,当时想了想并查集f[x]的含义,然后作了一个大胆的尝试,开一个二维并查集,既然f[x]储存的是x的父亲节点,那么我们用f[][],第一维表示颜色,第二维便是节点x,我们就用f[c][x]表示与颜色都为c的x的父亲节点,这样,在输入的时候,直接将颜色相同的两个点用并查集联通起来,然后查询的时候,因为颜色总共才100种,我们也可以在输入的时候将颜色最大值记录下来,然后从1开始遍历,如果两个节点都有与这种颜色的边相连,再用并查集进行判断是否联通,是,则有一种联通方式;如果不明白请看代码+注释:
const int N=100+10;
int v[N][N],f[N][N];
int find(int c,int x)
{
return f[c][x]==-1?x:f[c][x]=find(c,f[c][x]);//第一维代表颜色,第二维代表节点;
}
int main()
{
int n,m,q,i;
while(~scanf("%d%d",&n,&m))
{
int uu,vv,c,cc=1;
memset(v,0,sizeof(v));
memset(f,-1,sizeof(f));
for(i=0;i<m;i++)
{
scanf("%d%d%d",&uu,&vv,&c);
v[uu][c]=1;
v[vv][c]=1;//标记与顶点uu、vv相连的颜色存在;
cc=max(cc,c);//记录颜色最大值;
int xx=find(c,uu);//既然uu、vv都与颜色c相连,那就求出颜色为c时顶点x的父亲节点,如不相同,则联通起来;
int yy=find(c,vv);
if(xx!=yy)
f[c][xx]=yy;//联通;
}
scanf("%d",&q);
while(q--)
{
int sum=0;
scanf("%d%d",&uu,&vv);
for(i=1;i<=cc;i++)
if(v[uu][i]&&v[vv][i])//颜色i与uu、vv都相连时判断其父亲节点是否相同,是,则联通;
{
int xx=find(i,uu);
int yy=find(i,vv);
if(xx==yy)
sum++;
}
printf("%d\n",sum);
}
}
return 0;
}
考的还是对知识点的掌握程度,是否能灵活运用,博主也是碰巧想到了,真的要很大胆尝试,猜想,也就是稍加修改,一A而过~~
B. Mr. Kitayuta's Colorful Graph,二维并查集,一个简单变形就可以水过了~~的更多相关文章
- CodeForces - 505B Mr. Kitayuta's Colorful Graph 二维并查集
Mr. Kitayuta's Colorful Graph Mr. Kitayuta has just bought an undirected graph consisting of n verti ...
- Mr. Kitayuta's Colorful Graph 多维并查集
Mr. Kitayuta's Colorful Graph 并查集不仅可以用于一维,也可以用于高维. 此题的大意是10W个点10W条边(有多种颜色),10W个询问:任意两个节点之间可以由几条相同颜色的 ...
- Codeforces 506D Mr. Kitayuta's Colorful Graph(分块 + 并查集)
题目链接 Mr. Kitayuta's Colorful Graph 把每种颜色分开来考虑. 所有的颜色分为两种:涉及的点的个数 $> \sqrt{n}$ 涉及的点的个数 $<= ...
- CodeForces 505B Mr. Kitayuta's Colorful Graph
Mr. Kitayuta's Colorful Graph Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d ...
- Codeforces Round #286 (Div. 2) B. Mr. Kitayuta's Colorful Graph dfs
B. Mr. Kitayuta's Colorful Graph time limit per test 1 second memory limit per test 256 megabytes in ...
- Codeforces Round #286 (Div. 1) D. Mr. Kitayuta's Colorful Graph 并查集
D. Mr. Kitayuta's Colorful Graph Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/ ...
- B. Mr. Kitayuta's Colorful Graph
B. Mr. Kitayuta's Colorful Graph time limit per test 1 second Mr. Kitayuta has just bought an undi ...
- codeforces 505B Mr. Kitayuta's Colorful Graph(水题)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Mr. Kitayuta's Colorful Graph Mr. Kitayut ...
- Codeforces Round #286 (Div. 1) D. Mr. Kitayuta's Colorful Graph
D - Mr. Kitayuta's Colorful Graph 思路:我是暴力搞过去没有将答案离线,感觉将答案的离线的方法很巧妙.. 对于一个不大于sqrt(n) 的块,我们n^2暴力枚举, 对于 ...
随机推荐
- DP Codeforces Round #260 (Div. 1) A. Boredom
题目传送门 /* 题意:选择a[k]然后a[k]-1和a[k]+1的全部删除,得到点数a[k],问最大点数 DP:状态转移方程:dp[i] = max (dp[i-1], dp[i-2] + (ll) ...
- 题解报告:poj 3320 Jessica's Reading Problem(尺取法)
Description Jessica's a very lovely girl wooed by lots of boys. Recently she has a problem. The fina ...
- 468 Validate IP Address 验证IP地址
详见:https://leetcode.com/problems/validate-ip-address/description/ Java实现: class Solution { public St ...
- 置换测试: Mock, Stub 和其他
简介 在理想情况下,你所做的所有测试都是能应对你实际代码的高级测试.例如,UI 测试将模拟实际的用户输入(Klaas 在他的文章中有讨论)等等.实但际上,这并非永远都是个好主意.为每个测试用例都访问一 ...
- Android开发中使用代码删除数据库
更多信息参考:Android开发中使用代码删除数据库 在Android开发中,如果用到数据库,就会有一个很麻烦的问题,就是有时候需要删除数据库很麻烦,要打开Android Device Monitor ...
- SharedPrefences的用处
存储数据 SharedPreferences.Editor edit = getSharedPreferences("data", MODE_PRIVATE).edit(); ed ...
- greendao3.2.3配置时遇到的问题
这两天我一直在研究greendao这个框架,我在GitHub下载了 greendao3.2.2:https://github.com/greenrobot/greenDAO,照着网址里面来配置: // ...
- Objective -C Categories
Objective -C Categories The dynamic runtime dispatch mechanism employed by Objective-C lets you add ...
- mysql执行语句汇总
插入select的数据 INSERT INTO `test1`( order_id, goods_id, goods_name, goods_sn, product_id, goods_number, ...
- Microsoft SQL Server学习(二)
目录 关于数据库的语法: 1.创建数据库 create database 数据库名 on primary (主文件属性(name,filename,size等)) -用逗号隔开次要主要文件和次要文件 ...