Codeforces 550D. Regular Bridge 构造
来源:互联网 发布:一念永恒 知乎 编辑:程序博客网 时间:2024/05/06 19:29
求一个图,每个点的度数都为K而且必须至少要有一个桥.
构造题:
只有k为奇数的时候有解, 构造这样的一个图,左边一团有 k+1 个点 , 右边一团也有 k+1 个点, 中间经过 m1 , m2 连着一个桥.
如果左右两团是完全图,则每个点的度数都为k, 现在考虑如何通过m1,m2连接起来而又不改变度数.
显然这个图是对称的,只考虑左边和点m1,m1和m2是一个桥,要连一条边,m1 和左边的团某个点A要连在一起,又要连一条边,这时A点的度数多了,要和团里的其他点B断掉一条边,为了保持B的度数不变,B再连一条边到m1,这时m1的度就至少为3了,然后将m1的度补全. 每次从左边团中删掉一条边,然后将这条边的两个点连到m1上就可以了.m1的度每次增加2,所以如果k为奇数的话都可以用这样的方法构造出来.
import java.util.*;import java.math.*;public class Main{int k,midl,midr;boolean[][] edge = new boolean[330][330];boolean[] used = new boolean[330];void cut_and_link(int from,int to,int goal){int tk=k-3;while(tk>0){boolean flag=false;for(int i=from;i<to&&flag==false;i++){if(used[i]==true) continue;for(int j=i+1;j<to;j++){if(i==2*k+4||i==4+k||i==1+k||i==1) continue;if(j==2*k+4||j==4+k||j==1+k||j==1) continue;if(used[j]==true) continue;if(edge[i][j]==true){used[i]=used[j]=true;//cutedge[i][j]=edge[j][i]=false;//linkedge[i][goal]=edge[goal][i]=true;edge[j][goal]=edge[goal][j]=true;// flagflag=true;break;}}}tk-=2;}}void build_tuan(int from ,int to){for(int i=from;i<=to;i++){for(int j=i+1;j<=to;j++){edge[i][j]=edge[j][i]=true;}}}void sovle(int k){midl=k+2; midr=k+3;build_tuan(1,k+1);edge[1][midl]=edge[midl][1]=true;edge[1][k+1]=edge[k+1][1]=false;edge[k+1][midl]=edge[midl][k+1]=true;cut_and_link(2,k+1,midl);edge[midl][midr]=edge[midr][midl]=true;build_tuan(k+4,2*k+4);edge[2*k+4][midr]=edge[midr][2*k+4]=true;edge[k+4][2*k+4]=edge[2*k+4][k+4]=false;edge[k+4][midr]=edge[midr][k+4]=true;cut_and_link(k+4,2*k+4,midr);}Main(){Scanner in = new Scanner(System.in);k=in.nextInt();if(k%2==0){System.out.println("No");return ;}System.out.println("Yes");if(k==1){System.out.println("2 1\n1 2");}else{sovle(k);int num=2*k+4,cnt=0;for(int i=1;i<=num;i++)for(int j=i+1;j<=num;j++)if(edge[i][j]) cnt++;System.out.printf("%d %d\n",num,cnt);for(int i=1;i<=num;i++){for(int j=i+1;j<=num;j++){if(edge[i][j]){System.out.printf("%d %d\n",i,j);}}}}}public static void main(String[] args){new Main();}}
1 0
- codeforces #550D Regular Bridge 构造
- Codeforces 550D Regular Bridge (构造)
- Codeforces 550D. Regular Bridge 构造
- CodeForces 550D Regular Bridge(构造)
- CodeForces 550D - Regular Bridge(构造)
- CodeForces 550 D.Regular Bridge(构造)
- Codeforces 550D Regular Bridge【思维+构造】好题!
- 【codeforces 550D】Regular Bridge
- codeforces #306 D 550D D. Regular Bridge(构造+图论)
- Codeforecs 550D - Regular Bridge (构造)
- Codeforces Round #306 (Div. 2) D - Regular Bridge 构造
- Codeforces Round #306 (Div. 2) D. Regular Bridge (构造)
- Codeforces Round #306 (Div. 2) 550D - Regular Bridge 构造图
- 【打CF,学算法——三星级】CodeForces 550D Regular Bridge (构造)
- Codeforces 550 Regular Bridge
- Codeforecs 550D Regular Bridge (神奇的构造题)
- SPOJ TRNGL Make Triangle && CodeForces 550D Regular Bridge
- CF 550D Regular Bridge
- 迷茫无限期
- Markdown学习(五)
- 一年了你到底做了什么?
- C#基础-----数据类型
- CSS3那些不为人知的高级属性
- Codeforces 550D. Regular Bridge 构造
- BestCoder Round #43 第二题 pog loves szh II
- 2014年最受欢迎WEB前端UI框架
- poj2563
- Java中的泛型方法
- Memcached 内存管理(一)
- maven和ant 比较
- A year with Go
- 《Java程序设计》第三次作业:网络编程