当前位置: 首页 > news >正文

HLG 1360 Leyni的国家III【并查集】

Description

Leyni经过了若干年的征战,终于建立了自己的国家,这个国家包含n个城市,编号为1n,而且这些城市之间存在m条双向通行的道路。不过Leyni的国家刚刚建立,所以他对每一条道路定义了道路警戒级别,由高到低分别为,a级,b级,c级。接下来,每条路径的路径警戒级别就等于这条路径所经过的所有道路的最高警戒级别;每两个城市之间的城际警戒级别就等于这两个城市之间的所有路径中的最低路径警戒级别。

现在,Leyni告诉了你所有道路的道路警戒级别,他想知道某些城市之间的城际警戒级别,请你帮助他!

Input

本题有多组测试数据,输入的第一行是一个整数T代表着测试数据的数量,接下来是T组测试数据。

对于每组测试数据:

1 包含三个以空格分隔的整数nmq (1 ≤ n ≤ 105, 0 ≤ m, q ≤ 106)

2 .. m + 1 每行包含一对整数u, v (1 ≤ u, vn, , u ≠ v) 与一个字母x ("a", "b", "c"之一)代表着城市u, v之间存在着一条警戒级别为x的道路。

注:输入数据保证每对城市之间最多只存在一条道路。

m + 2 .. m + 1 + q 每行包含一对整数u, v (1 ≤ u, vn, , u ≠ v) 代表着Leyni要查询城市u, v之间的城际警戒级别。

Output

对于每组测试数据:

1 .. q 请针对每次Leyni的查询按照其查询的顺序输出两个城市之间的城际警戒级别,如果两城市之间不存在路径,则输出-1

Sample Input

1

4 4 4

1 2 c

2 3 a

3 4 b

2 4 c

1 2

2 3

3 4

1 4

Sample Output

c

b

b

c

分析:用三个并查集 分别存放a,b,c集合。

View Code
#include<stdio.h>
#include<string.h>
int f[3][100005];
int find(int x,int i)
{return f[i][x]==x?x:(f[i][x]=find(f[i][x],i));}
void join(int x,int y,int i)
{        
    int fx=find(x,i);
    int fy=find(y,i);
    if(fx!=fy)
    {
        if(fy>fx)
            f[i][fy]=f[i][fx];
        else f[i][fx]=f[i][fy];
    }
}
int main()
{
    char s[2];
    int t,i,j,n,m,a,b,q;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&n,&m,&q);
        for(i=0;i<3;i++)
            for(j=1;j<=n;j++)
                f[i][j]=j;
        while(m--)
        {
            scanf("%d%d%s",&a,&b,s);
            if(s[0]=='a')
            {
                join(a,b,0);
                join(find(a,1),find(b,1),0);
                join(find(a,2),find(b,2),0);
            }
            else if(s[0]=='b')
            {
                join(a,b,1);
                join(find(a,0),b,0);
                join(find(b,0),a,0);
                join(find(a,2),find(b,2),1);
            }
            else {
                join(a,b,2);
                join(find(a,0),b,0);
                join(find(b,0),a,0);
                join(find(a,1),b,1);
                join(find(b,1),a,1);
            }
        }
        while(q--)
        {
            scanf("%d%d",&a,&b);
        if(find(a,2)==find(b,2))
                printf("c\n");
        else if(find(a,1)==find(b,1))
                printf("b\n");
        else if(find(a,0)==find(b,0))
                printf("a\n");
            else printf("-1\n");
        }
    }
    return 0;
}

 

转载于:https://www.cnblogs.com/dream-wind/archive/2012/04/15/2450686.html

相关文章:

  • 钗头凤
  • CSS 教程Part7 [打印、单位表](摘录自 W3C School)
  • mysql表错误记录
  • 有了网络,学习也方便了不少
  • 解决 vSphere Web Access 503 错误
  • C++关键词
  • ubuntu depeen 一些技巧
  • 【转载】[Windows Forms] : BindingSource使用模式 - Data Binding基础知识 (二)
  • groovy string类型转换成int(来自csdn)不要问为什么系列6
  • svnserve:error while loading shared libraries:/usr/local/lib/libsvn_fs-1.so.0:cannot restore
  • 经常查看的一些命中率
  • 删除Exchange 2010 中的已断开连接邮箱
  • 软件开发30岁,中层管理40岁?
  • Oracle数据库 ORA-28000 错误处理方式
  • 再谈.NET Micro Framework移植
  • JavaScript-如何实现克隆(clone)函数
  • 《微软的软件测试之道》成书始末、出版宣告、补充致谢名单及相关信息
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • centos安装java运行环境jdk+tomcat
  • Hexo+码云+git快速搭建免费的静态Blog
  • JavaScript 一些 DOM 的知识点
  • MySQL主从复制读写分离及奇怪的问题
  • node.js
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Python实现BT种子转化为磁力链接【实战】
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # include “ “ 和 # include < >两者的区别
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • ###C语言程序设计-----C语言学习(3)#
  • (16)Reactor的测试——响应式Spring的道法术器
  • (3)llvm ir转换过程
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Core 中的路径问题
  • .Net MVC4 上传大文件,并保存表单
  • .net 后台导出excel ,word
  • .NET 中的轻量级线程安全
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 使用反射注册事件
  • .NetCore部署微服务(二)
  • @Mapper作用
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ C++ ] STL---stack与queue
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • [04]Web前端进阶—JS伪数组
  • [2669]2-2 Time类的定义
  • [acm算法学习] 后缀数组SA
  • [Angular] 笔记 8:list/detail 页面以及@Input
  • [BSGS算法]纯水斐波那契数列
  • [BZOJ 4034][HAOI2015]T2 [树链剖分]