题目传送门

 /*
题意:两点之间有不同颜色的线连通,问两点间单一颜色连通的路径有几条
DFS:暴力每个颜色,以u走到v为结束标志,累加条数
注意:无向图
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
using namespace std; const int MAXN = 1e2 + ;
const int INF = 0x3f3f3f3f;
int n, m;
bool vis[MAXN];
vector<pair<int, int> > V[MAXN]; bool DFS(int u, int v, int c)
{
vis[u] = true;
if (u == v) return true;
for (int i=; i<V[u].size (); ++i)
{
pair<int, int> p = V[u][i];
if (p.second == c && !vis[p.first])
{
if (DFS (p.first, v, c)) return true;
}
} return false;
} int main(void) //Codeforces Round #286 (Div. 2) B - Mr. Kitayuta's Colorful Graph
{
//freopen ("B.in", "r", stdin); while (scanf ("%d%d", &n, &m) == )
{
for (int i=; i<=m; ++i)
{
int u, v, c;
scanf ("%d%d%d", &u, &v, &c);
V[u].push_back (make_pair (v, c));
V[v].push_back (make_pair (u, c));
}
int q; scanf ("%d", &q);
while (q--)
{
int u, v; scanf ("%d%d", &u, &v);
int ans = ;
for (int i=; i<=m; ++i)
{
memset (vis, false, sizeof (vis));
if (DFS (u, v, i)) ans++;
}
printf ("%d\n", ans);
}
} return ;
}

 /*
并查集:开在结构体的并查集,进行如下的两个操作
uf[c].Union (u, v); uf[i].same (u, v)
*/
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std; const int MAXN = 1e2 + ;
const int INF = 0x3f3f3f3f;
struct UF
{
int rt[MAXN];
void init(void) {memset (rt, -, sizeof (rt));} int Find(int x) {return (rt[x] == -) ? x : rt[x] = Find (rt[x]);} void Union(int x, int y)
{
int tx = Find (x);
int ty = Find (y);
if (tx > ty) rt[ty] = tx;
else if (tx < ty) rt[tx] = ty;
} bool same(int x, int y)
{
return (Find (x) == Find (y));
}
}uf[MAXN];
int n, m; int main(void) //Codeforces Round #286 (Div. 2) B - Mr. Kitayuta's Colorful Graph
{
//freopen ("B.in", "r", stdin); while (scanf ("%d%d", &n, &m) == )
{
for (int i=; i<=m; ++i) uf[i].init ();
for (int i=; i<=m; ++i)
{
int u, v, c;
scanf ("%d%d%d", &u, &v, &c);
uf[c].Union (u, v);
}
int q; scanf ("%d", &q);
while (q--)
{
int u, v; scanf ("%d%d", &u, &v);
int ans = ;
for (int i=; i<=m; ++i)
{
if (uf[i].same (u, v)) ans++;
}
printf ("%d\n", ans);
}
} return ;
}

并查集

DFS/并查集 Codeforces Round #286 (Div. 2) B - Mr. Kitayuta's Colorful Graph的更多相关文章

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

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

  3. Codeforces Round #286 (Div. 2)B. Mr. Kitayuta's Colorful Graph(dfs,暴力)

    数据规模小,所以就暴力枚举每一种颜色的边就行了. #include<iostream> #include<cstdio> #include<cstdlib> #in ...

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

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

  5. 水题 Codeforces Round #286 (Div. 2) A Mr. Kitayuta's Gift

    题目传送门 /* 水题:vector容器实现插入操作,暴力进行判断是否为回文串 */ #include <cstdio> #include <iostream> #includ ...

  6. CF 286(div 2) B Mr. Kitayuta's Colorful Graph【传递闭包】

    解题思路:给出n个点,m条边(即题目中所说的两点之间相连的颜色) 询问任意两点之间由多少种不同的颜色连接 最开始想的时候可以用传递闭包或者并查集来做,可是并查集现在还不会做,就说下用传递闭包来做的这种 ...

  7. Codeforces Round #286 (Div. 1) B. Mr. Kitayuta&#39;s Technology (强连通分量)

    题目地址:http://codeforces.com/contest/506/problem/B 先用强连通判环.然后转化成无向图,找无向图连通块.若一个有n个点的块内有强连通环,那么须要n条边.即正 ...

  8. Codeforces Round #286 Div.1 A Mr. Kitayuta, the Treasure Hunter --DP

    题意:0~30000有30001个地方,每个地方有一个或多个金币,第一步走到了d,步长为d,以后走的步长可以是上次步长+1,-1或不变,走到某个地方可以收集那个地方的财富,现在问走出去(>300 ...

  9. Codeforces Round #286 (Div. 2)A. Mr. Kitayuta's Gift(暴力,string的应用)

    由于字符串的长度很短,所以就暴力枚举每一个空每一个字母,出现行的就输出.这么简单的思路我居然没想到,临场想了很多,以为有什么技巧,越想越迷...是思维方式有问题,遇到问题先分析最简单粗暴的办法,然后一 ...

随机推荐

  1. Android 通过Application 传递数据

    </pre><pre> package com.example.ApplicationTest; import android.app.Application; /** * C ...

  2. 初学unity 3D 遇到的一个问题--预制体选项没有找到。

    没有找到预制体这个选项. 我的工程如下:

  3. Mysql性能优化笔记

    一,索引 1.Innodb索引使用的是B+树 2.尽量简化where条件,比如不要出现 where id + 3 = 5,这无法使用索引 3.索引很大时,可以冗余一列来模拟哈希索引 4.小的表不需要使 ...

  4. CentOS笔记-其他杂记

    1.忘记密码时,可以用single模式来修改密码,为了安全,可以禁用single模式,参考网址如下 Centos服务器禁止单用户模式(single)来增强系统安全 2.远程登录:ssh root@xx ...

  5. 组合式+迭代式+链式 MapReduce

    1.迭代式mapreduce 一些复杂的任务难以用一次mapreduce处理完成,需要多次mapreduce才能完成任务,例如Pagrank,Kmeans算法都需要多次的迭代,关于mapreduce迭 ...

  6. 常见mysql分布式数据中间件

    一般分为三种: 1. proxy sharding,目前由cobar,mycat,drds,atlas修改,这几个产品的起源一般是mysqlproxy 或 ameoba,特点是mysql协议基本兼容, ...

  7. luogu3384 【模板】 树链剖分

    题目大意 已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作:操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z操作2: 格式: 2 x ...

  8. codeforces 690D1 D1. The Wall (easy)(dfs)

    题目链接: D1. The Wall (easy) time limit per test 0.5 seconds memory limit per test 256 megabytes input ...

  9. Luogu网校听课笔记(自用

    TG助学课——noilinux 8.2 深夜 Noi Linux的使用——darkflames的博客 #include<bits/stdc++.h> using namespace std ...

  10. 喵哈哈村的魔法考试 Round #1 (Div.2)

    比赛地址:http://qscoj.cn/contest/2/ 都是中文题,这里不在详述题意 A.喵哈哈村的魔法石 分析:暴力求解 #include<iostream> #include& ...