2015 测试赛 同构 hihoCoder

题目1 : 同构

时间限制:2000ms

单点时限:1000ms

内存限制:256MB

描述

给定2个树A和B,保证A的节点个数>=B的节点个数。

现在你需要对树A的边进行二染色。

一个好的染色方案,指不存在一个树A中的连通块,同时满足以下2个条件

1. 其中只有同色的边

2. 和B同构。两个树同构是指,存在一个一一映射(既是单射又是满射),将树B的各节点映射到不同的树A的节点,使得原来在树B中相邻的点,在映射后,仍相邻。

问是否存在一种好的染色方案。

输入

第一行一个整数T (1<=T<=10),表示数据组数。

接下来是T组输入数据,测试数据之间没有空行。

每组数据格式如下:

第一行一个整数N ,表示树A的节点总数。

接下来N-1行,每行2个数a, b (1 <= a, b <= N)表示树A的节点a和b之间有一条边。

接下来一行,一个整数M(1 <= M <= N),表示树B的节点总数。

接下来M-1行,每行2个数a, b (1 <= a, b <= M)表示树B的节点a和b之间有一条边。

输出

对每组数据,先输出“Case x: ”,x表示是第几组数据,然后接“YES”/“NO”,表示是否存在所求的染色方案。

数据范围

小数据:1 <= N <= 20

大数据:1 <= N <= 1000000

样例解释

无论如何染色,只要从A中挑一条边就行了。

样例输入
1
3
1 2
2 3
2
1 2
样例输出
Case 1: NO

这样。如果树B的任意结构的深度超过2,那么,交叉染色能在A中避免B的出现。 否则当B的深度不超过2,即是两层的树,那么,只要当A中存在一点,它的度数为T1M>=T2M*2-1,就能得到与B相同染色的块。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int N=1000010;
int T1[N],T2[N];

int main(){
	int T,n,m,u,v,T1M,T2M,icase=0;
	scanf("%d",&T);
	while(T--){
		scanf("%d",&n);
		T1M=T2M=0;
		memset(T1,0,sizeof(int)*(n+10));
		for(int i=1;i<n;i++){
			scanf("%d%d",&u,&v);
			T1[u]++; T1[v]++;
			T1M=max(T1M,max(T1[u],T1[v]));
		}
		scanf("%d",&m);
		memset(T2,0,sizeof(int)*(m+10));
		for(int i=1;i<m;i++){
			scanf("%d%d",&u,&v);
			T2[u]++,T2[v]++;
			T2M=max(T2M,max(T2[u],T2[v]));
		}
		printf("Case %d: ",++icase);
		if(T2M<m-1){
			puts("YES");
		}
		else{
			if(T1M>=T2M*2-1)
			puts("NO");
			else puts("YES");
		}
	}
	return 0;
}

  

时间: 2024-11-01 23:45:03

2015 测试赛 同构 hihoCoder的相关文章

2015 测试赛 大神和小伙伴 hihoCoder

立方和公式和平方和公式.表示从来不记得这些公式... 每库礼物不同数量相同,总数=1+2+...+n=(n+1)*n/2 选取礼物的可能性的最大值为[(n+1)*n/2]^3 选取礼物价值重复两次的总数3*(1^2+2^2+...+n^2)*(1+2+...+n)=3*[n*(n+1)*(2*n+1)/6]*[(n+1)*n/2]=n^2*(n+1)^2*(2*n+1)/4=[n*(n+1)/2]^2*(2*n+1) 选取礼物价值重复三次的总数1^3+2^3+...+n^3=[n*(n+1)/2

编程之美2015测试赛之格格取数

格格取数 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给你一个m x n (1 <= m, n <= 100)的矩阵A (0<=aij<=10000),要求在矩阵中选择一些数,要求每一行,每一列都至少选到了一个数,使得选出的数的和尽量的小. 输入 多组测试数据.首先是数据组数T 对于每组测试数据,第1行是两个正整数m, n,分别表示矩阵的行数和列数. 接下来的m行,每行n个整数,之间用一个空格分隔,表示矩阵A的元素. 输出 每组数据输出一行,表示选出

2018.10.2浪在ACM 集训队第二次测试赛

2018.10.26 浪在ACM 集训队第二次测试赛 题目一览表(Green color indicate understand and Accept) 来源 考察知识点 完成时间 A 1273 海港(比赛过题) NOIP 普及组 2016 查分数组+二分 2018.10.26 D 1272 回问日期(比赛过题) NOIP 普及组 2016 思维? 2018.10.26 G 1268 扫雷游戏(比赛过题) NOIP 普及组 2015 暴力 or DFS 2018.10.26          

2015省赛总结

2015省赛总结 AC-team  周凯——————2015年5月15日----23:35 2015年的省赛已经过去一个星期,今天我就做一下总结. 上周五,我们接到消息,可以作为旅游对去参加今年的省赛,其实听到这个消息我很高兴,因为终于可以出去见识一下什么是真正的ACM竞赛. 就在周四,舍友突发阑尾炎,我和另一基友几乎一晚没睡,舍友更不用说,整整疼了一天一夜.第二天(星期五)中午打的回来时,居然在出租车上睡着了.回来之后,下午接到消息,我们队可以以旅游队的名义去参加省赛,队友得知消息后,都很高兴

【2016北京集训测试赛(八)】 crash的数列

Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多点数列套着来加速转移呢? 但是发现好像太多数列套起来是可以烦死人的...... 我们就采用嵌套两次吧,记原数列为A,第一层嵌套为B,第二层嵌套为C. 我们其实可以发现一些规律,对于Ci,它对应了B中i的个数:对于Bi,它对应了A中i的个数. 稍加处理即可,我们一边计算一边模拟数列的运算,同时可以计算

SDUT2013级测试赛_D

题目描述 给出一棵含有n个点的树,每个点权值为wi,求从根节点到叶子结点权值和最大的那条路经的权值和是多少. 输入 n(1<= n && n <= 10000). 接下来n+1行,每行两个整数w(w <= 1000). 第i个节点的父节点为w,若 i为根节点.600组数据. 输出 对于每组数据,输出一个数代表答案. 示例输入 3 0 5 1 5 1 6 示例输出 11 提示 来源 解题报告 求从根节点出发到叶子的最长路...很像数塔... 我暴力dfs过了.怒搜所有数枝,

计蒜之道 测试赛 (BCD)

测试赛写写题解不会被吐槽吧... 淘汰赛车 时限:1000ms 内存:262144K 赛车比赛在潘多拉星球变得越来越流行了.但是他们的比赛跟我们平常的不太一样:n 辆赛车在一条长长的直道上展开同台竞技.每辆赛车的速度都为 1m/s,整条赛道在每一米都有坐标标记. 在比赛的赛车中,赛车 i 从 0 秒开始由 ai 向 bi 移动.到达 bi 之后转而返回由 bi 向 ai 移动.循环往复. 又是蒜头菌!原来这是蒜头菌正在玩的一个手机小游戏.蒜头菌可以在某些位置放下 TNT 炸毁某些赛车.因为他有

测试赛A - Colored Sticks(并查集+字典树+欧拉回路)

A - Colored Sticks Time Limit:5000MS     Memory Limit:128000KB     64bit IO Format:%I64d & %I64u Submit Status Description You are given a bunch of wooden sticks. Each endpoint of each stick is colored with some color. Is it possible to align the sti

测试赛B - Balance(天平的dp问题)

B - Balance Time Limit:1000MS     Memory Limit:30000KB     64bit IO Format:%I64d & %I64u Submit Status Description Gigel has a strange "balance" and he wants to poise it. Actually, the device is different from any other ordinary balance. It