NC223200. E图同构
描述
输入描述
一行一个整数 。
输出描述
第一行一个字符串 YES 或 NO,表示是否存在对应的反例。
若存在,第一行输出 YES,剩下的输出分成两部分,分别表示你构造的图 G 和 H,对于任意一部分:第一行一个正整数 m 表示图的边数,然后 m 行每行两个整数 u,v 表示一条 u,v 之间的边。
因为图是简单图,容易发现 。
你需要保证 G,H 都是连通图,且 G,H 不同构,,且 G,H 分别满足其中任意两个点 u,v 。
若不存在,输出一行 NO。
示例1
输入:
4
输出:
YES 4 1 2 2 3 1 3 1 4 4 1 3 2 3 1 4 2 4
C++ 解法, 执行用时: 3ms, 内存消耗: 408K, 提交时间: 2021-09-17 20:20:17
#include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; if(n<=6){ cout<<"NO"; return 0;} cout<<"YES"<<endl; int m=11+n-7; cout<<m<<endl; cout<<"1 2\n2 3\n3 4\n4 5\n5 6\n6 7\n7 1\n"; cout<<"1 3\n2 4\n2 7\n4 6\n"; if(n>=8) cout<<"1 8\n"; for( int i=9;i<=n;++i) cout<<i-1<<' '<<i<<endl; cout<<m<<endl; cout<<"1 2\n2 3\n3 4\n4 5\n5 6\n6 7\n7 1\n"; cout<<"1 3\n2 4\n2 6\n4 7\n"; if(n>=8) cout<<"1 8\n"; for( int i=9;i<=n;++i) cout<<i-1<<' '<<i<<endl; }