プログラミングの美のテスト試合の第2題-大神と3人の小さい仲間


大神と三人の仲間
時間制限:
2000ms
単一点時限:
1000ms
メモリの制限:
256MB
説明
2つのツリーAとBが与えられ、Aのノード数>=Bのノード数が保証される.
今、木Aの辺を二色に染める必要があります.
1つの好ましい染色スキームは、1つのツリーAにおける連通ブロックが存在しないことを意味し、同時に以下の2つの条件を満たす
1.同色のエッジのみ
2.Bと同構造.2つのツリー同構造とは、ツリーBの各ノードを異なるツリーAのノードにマッピングし、元のツリーBに隣接していた点がマッピング後も隣接するように、1つ1つのマッピング(単射でも満射でもある)が存在することを意味する.
良い染色案があるかどうかを聞く.
入力
1行目の整数T(1<=T<=10)は、データ群数を表す.
次はTグループ入力データで、テストデータの間に空行はありません.
各データのフォーマットは次のとおりです.
1行目の整数Nは、ツリーAのノード総数を表す.
次にN−1行は、1行あたり2個の数a,b(1<=a,b<=N)がツリーAのノードaとbとの間に辺があることを示す.
次の行は、ツリーBのノード総数を表す整数M(1<=M<=N)である.
次にM−1行、1行あたり2個の数a、b(1<=a、b<=M)は、ツリーBのノードaとbとの間に辺があることを示す.
しゅつりょく
各グループのデータに対して、まず「Case x:」を出力し、xは何番目のグループのデータであることを示し、次に「YES」/「NO」を接続し、所望の染色スキームが存在するか否かを示す.
データ範囲
小データ:1<=N<=20
ビッグデータ:1<=N<=1000000
サンプル解釈
いくら染めても、Aの中から1本選んでおけばいい.
サンプル入力
1
3
1 2
2 3
2
1 2
サンプル出力
Case 1: NO
  • この問題は比較的に簡単で、自分で数学の公式を押して、基本的に一度にACをしました.1^3+2^3+...+n^3+i*j*k*6異なるijkに対して和を求める(i
  • 次はACコードで、第1題は問題を理解していないで、第3題は考えにくい問題が多すぎて、DFS+剪定でしょう.細かく想像する....
  • #include
    using namespace std;
    long long ans=0;
    const int maxn=1e9+7;
    
    int main(){
    	int T,n;
    	cin>>T;
    	for(int count=1;count<=T;count++){
    		cin>>n;
    		ans=0;
    		for(int i=1;i<=n;i++)
    			ans=(ans+i*i*i)%maxn;
    		for(int i=1;i<=n-2;i++)
    			for(int j=i+1;j<=n-1;j++)
    				for(int k=j+1;k<=n;k++)
    					ans=(ans+i*j*k*6)%maxn;
    		cout<