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,二维并查集,一个简单变形就可以水过了~~的更多相关文章

  1. CodeForces - 505B Mr. Kitayuta's Colorful Graph 二维并查集

    Mr. Kitayuta's Colorful Graph Mr. Kitayuta has just bought an undirected graph consisting of n verti ...

  2. Mr. Kitayuta's Colorful Graph 多维并查集

    Mr. Kitayuta's Colorful Graph 并查集不仅可以用于一维,也可以用于高维. 此题的大意是10W个点10W条边(有多种颜色),10W个询问:任意两个节点之间可以由几条相同颜色的 ...

  3. Codeforces 506D Mr. Kitayuta's Colorful Graph(分块 + 并查集)

    题目链接  Mr. Kitayuta's Colorful Graph 把每种颜色分开来考虑. 所有的颜色分为两种:涉及的点的个数 $> \sqrt{n}$    涉及的点的个数 $<= ...

  4. CodeForces 505B Mr. Kitayuta's Colorful Graph

    Mr. Kitayuta's Colorful Graph Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d ...

  5. 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 ...

  6. 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/ ...

  7. 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 ...

  8. codeforces 505B Mr. Kitayuta's Colorful Graph(水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud Mr. Kitayuta's Colorful Graph Mr. Kitayut ...

  9. Codeforces Round #286 (Div. 1) D. Mr. Kitayuta's Colorful Graph

    D - Mr. Kitayuta's Colorful Graph 思路:我是暴力搞过去没有将答案离线,感觉将答案的离线的方法很巧妙.. 对于一个不大于sqrt(n) 的块,我们n^2暴力枚举, 对于 ...

随机推荐

  1. eclipse控制台不显示输出的解决办法

    1.进windows菜单 -> show view -> console2.还是windows菜单里面 -> preferences -> 打开左边的run/debug -&g ...

  2. C++中的数学函数汇总

    math.h 数学函数库,一些数学计算的公式的具体实现是放在math.h里,具体有: 1 三角函数 double sin (double); double cos (double); double t ...

  3. android开发学习 ------- volley网络请求的实例

    在  http://www.sojson.com/httpRequest/  上对http进行访问,将此访问在android中的应用 ********************************* ...

  4. AJPFX实列判断一个字符串是不是对称字符串

    import java.util.Scanner; /** *        判断一个字符串是否是对称字符串 */ public class StringDemo { public static vo ...

  5. Flutter交互实战-即刻App探索页下拉&拖拽效果

    前言 Flutter最近比较热门,但是Flutter成体系的文章并不多,前期避免不了踩坑:我这篇文章主要介绍如何使用Flutter实现一个比较复杂的手势交互,顺便分享一下我在使用Flutter过程中遇 ...

  6. Scala基础篇-04 try表达式

    1.try表达式 定义 try{} catch{} finally{} //例子 try{ Integer.parseInt("dog") }catch { }finally { ...

  7. Java:核心概念j积累(一)

    1.      抽象 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽象包括两个方面,一是过 ...

  8. Katalon Studio 安装 配置 简单使用

    本教程只针对Katalon Studio进行演示操作. 一.下载 Katalon 官网下载地址:https://www.katalon.com/download/ (需要注册账号) 二.解压.配置 直 ...

  9. Vue 数组和对象更新,但是页面没有刷新

    在使用数组的时候,数组内部数据发生改变,但是与数组绑定的页面的数据却没有发生变化. <ul> <li v-for="(item,index) in todos" ...

  10. ie11 突然不能加载外部css 很神奇 头部改为 <!DOCTYPE> <html>

    <!DOCTYPE html> <html> 改为 <!DOCTYPE> <html>   OK了