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暴力枚举, 对于 ...
随机推荐
- Visual studio docker build no such file or directory
在我构建新的镜像的时候, 发生 了 no such file or directory 的错误. 这个错误找了半天, 没头绪,项目结构是这样的: WebApplication1 建立在根目录下,是 ...
- 225 Implement Stack using Queues 队列实现栈
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack.pop ...
- 211 Add and Search Word - Data structure design 添加与搜索单词 - 数据结构设计
设计一个支持以下两个操作的数据结构:void addWord(word)bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z . ...
- [转]Windows Azure安全概述
本文转自:http://blogs.msdn.com/b/azchina/archive/2011/03/06/windows_5f00_azure_5f00_security_5f00_overvi ...
- vue HTTP请求(针对vue-resource)
//初始化页面需要做什么事情 //点击后需要做什么事情 //鼠标.键盘.冒泡.默认行为等事件 //前端调用接口就是按需展示数据//created和mounted里面都可以做数据处理,唯一不同的是cre ...
- PostgreSQL 数据库错误状态编号解释[附带列表
PostgreSQL 服务器发出的所有消息都赋予了五个字符的错误代码, 这些代码遵循 SQL 的 "SQLSTATE" 代码的习惯.需要知道发生了什么错误条件的应用通常应该测试错误 ...
- wps 图片代码 复制 粘贴
<table><tr><td><img src="C:\Users\Administrator\Desktop\QQ截图20160921180946 ...
- leetcode_655. Print Binary Tree
https://leetcode.com/problems/print-binary-tree/ 打印整棵二叉树 class Solution { public: int getTreeHeight( ...
- boostrapvalidator
一个例子 <%@ page contentType="text/html;charset=UTF-8" language="java" %> < ...
- 类方法__setattr__,__delattr__,__getattr__
__getattr__,_delattr_,_getattr_ class Foo: x = 1 def __init__(self, y): self.y = y def __getattr__(s ...