zoukankan      html  css  js  c++  java
  • 宁波工程学院2020新生校赛L

    链接:https://ac.nowcoder.com/acm/contest/6106/L
    来源:牛客网

    时间限制:C/C++ 1秒,其他语言2秒
    空间限制:C/C++ 262144K,其他语言524288K
    64bit IO Format: %lld

    题目描述

    小梁变强之后决定建设自己的道馆,她特别喜欢去其他的道馆串门。
    但是有些道馆之间没有道路连通,于是小梁想知道自己能不能去她想去的道馆,
    你能帮她写一个程序来查询两个道馆之间是否互相存在道路联通吗;
    如果存在输出“YES”,反之输出“NO”。

    输入描述:

    第一行为三个整数N为道馆个数,M为线路条数,T为查询次数(1≤N<1000,1≤M<1000,1≤T<10000)
    第二行至第M+1行,每行两个整数,代表两个道馆的编号a,b(1≤a≤1000,1≤b≤1000),表示这两个道馆之间有道路相连
    第M+2行至第M+T+2行,每行两个整数,代表查询这两个道馆。

    输出描述:

    T行,每行对应一个查询,假如查询的道馆之间可以连接则输出YES,否则则输出NO。
    示例1
    输入
    4 2 2
    1 3
    4 3
    1 2
    3 4
    输出
    NO
    YES

    题目大意:

    输入N M T 表示有n个道馆,M条通路,T个询问,每次询问两个道馆是否相连。

    解题思路:

    基础并查集,每次都连边,询问时find(a) == find(b)则说明相连,并查集模板即可解题。AC代码:

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    const int N = 1e3+50;
    int f[N];
    int n,t,m,a,b;
    void init()//初始化 自己是自己的父节点
    {
    	for(int i=0;i<=n;i++)
    	  f[i]=i;
    }
    int find(int x)//寻根+路径压缩
    {
    	return f[x]==x?x:f[x]=find(f[x]);
    }
    void merge(int x,int y)//合并
    {
    	f[find(y)]=find(x);
    }
    int main()
    {
    	cin>>n>>t>>m;
    	init();
    	for(int i=1;i<=t;i++)
    	{
    		cin>>a>>b;
    		merge(a,b);
    	}
    	for(int i=1;i<=m;i++)
    	{
    		cin>>a>>b;
    		cout<<(find(a)==find(b)?"YES":"NO")<<endl;
    	}
    	//system("pause");
    	return 0;
    }
    
  • 相关阅读:
    Grid布局方式
    布局
    应用主题资源
    主题资源
    返回键
    标记 {x:Null},d:DesignWidth,d:DesignHeight
    WMAppManifest.xml
    项目模板
    Panorama和Pivot控件
    ashx页面中context.Session["xxx"]获取不到值的解决办法
  • 原文地址:https://www.cnblogs.com/Hayasaka/p/14294241.html
Copyright © 2011-2022 走看看