Codeforces 673D Bear and Two Paths【贪心】
来源:互联网 发布:数控铣床编程简单100例 编辑:程序博客网 时间:2024/06/05 16:12
Bearland has n cities, numbered 1 through n. Cities are connected via bidirectional roads. Each road connects two distinct cities. No two roads connect the same pair of cities.
Bear Limak was once in a city a and he wanted to go to a cityb. There was no direct connection so he decided to take a long walk, visiting each cityexactly once. Formally:
- There is no road between a and b.
- There exists a sequence (path) of n distinct citiesv1, v2, ..., vn thatv1 = a,vn = b and there is a road betweenvi andvi + 1 for.
On the other day, the similar thing happened. Limak wanted to travel between a cityc and a city d. There is no road between them but there exists a sequence ofn distinct cities u1, u2, ..., un thatu1 = c,un = d and there is a road betweenui andui + 1 for.
Also, Limak thinks that there are at most k roads in Bearland. He wonders whether he remembers everything correctly.
Given n, k and four distinct citiesa, b,c, d, can you find possible paths(v1, ..., vn) and(u1, ..., un) to satisfy all the given conditions? Find any solution or print-1 if it's impossible.
The first line of the input contains two integers n andk (4 ≤ n ≤ 1000,n - 1 ≤ k ≤ 2n - 2) — the number of cities and the maximum allowed number of roads, respectively.
The second line contains four distinct integersa, b,c and d (1 ≤ a, b, c, d ≤ n).
Print -1 if it's impossible to satisfy all the given conditions. Otherwise, print two lines with paths descriptions. The first of these two lines should containn distinct integers v1, v2, ..., vn wherev1 = a andvn = b. The second line should containn distinct integers u1, u2, ..., un whereu1 = c andun = d.
Two paths generate at most 2n - 2 roads:(v1, v2), (v2, v3), ..., (vn - 1, vn), (u1, u2), (u2, u3), ..., (un - 1, un). Your answer will be considered wrong if contains more than k distinct roads or any other condition breaks. Note that (x, y) and (y, x) are the same road.
7 112 4 7 3
2 7 1 3 6 5 47 1 5 4 6 2 3
1000 99910 20 30 40
-1
In the first sample test, there should be 7 cities and at most11 roads. The provided sample solution generates 10 roads, as in the drawing. You can also see a simple path of length n between 2 and 4, and a path between 7 and 3.
题目大意:
给你一个包含N个点的无向图,要求我们用小于等于K条边来构造出这个图。
这个图有两对起点和终点:a,b,c,d;
现在要求构造出的图,a和b之间没有直接相连的边,c和d之间没有直接相连的边。
但是从a到b有一条路径,a作为起点,b作为终点,路径上包含所有点(1.2.3.4.5..............N)。
同理,从c到d也有一条路径,c作为起点,d作为终点,路径上也包含所有点。
思路:
1、因为边数有限制,我们肯定是想用最少的边数来完成这个任务。
对于从a到b的路径,用最少的边肯定就是让a作为起点,b作为终点的同时,其他点作为中间点,构成一个欧拉路径。
比如样例我们就可以很简单的构造出来一种可行答案:2 1 3 5 6 74
2、但是现在又要求要有一条从c到d的路径。那么我们此时希望从c到d的这条欧拉路经和从a到b的路径分享更多的重边。
通过简单的设想,我们不难发现,当我们设定从a到b的路径为:
a c u............v d b
同时设定从c到d的路径为:
c a u............v b d
的时候,我们只要在从a到b的欧拉路径的基础上,增加两条边就能够使得整个图满足题目要求的条件【(a,u),(v,b)】。
3、注意N==4的时候,无论怎样设定都会有相邻的情况。
Ac代码:
#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int vis[100060];int ans[100060];int ans2[100060];int main(){ int n,m; while(~scanf("%d%d",&n,&m)) { memset(vis,0,sizeof(vis)); int a,b,c,d; scanf("%d%d%d%d",&a,&b,&c,&d); if(n==4||m<n+1) { printf("-1\n"); continue; } ans[1]=a; ans[n]=b; ans[2]=c; ans[n-1]=d; int cnt=3; for(int i=1;i<=n;i++) { if(i!=a&&i!=b&&i!=c&&i!=d)ans[cnt++]=i; } for(int i=1;i<=n;i++) { printf("%d ",ans[i]); } printf("\n"); ans2[1]=c; ans2[n]=d; ans2[2]=a; ans2[n-1]=b; cnt=3; for(int i=1;i<=n;i++) { if(ans[i]!=a&&ans[i]!=b&&ans[i]!=c&&ans[i]!=d)ans2[cnt++]=ans[i]; } for(int i=1;i<=n;i++) { printf("%d ",ans2[i]); } printf("\n"); }}
- Codeforces 673D Bear and Two Paths (贪心构造)
- Codeforces 673D Bear and Two Paths【贪心】
- CodeForces 673D Bear and Two Paths(构造)
- CodeForces 673D - Bear and Two Paths(构造)
- codeforcs 351 D. Bear and Two Paths
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) D. Bear and Two Paths
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) D. Bear and Two Paths
- CodeForces 643 B.Bear and Two Paths(构造)
- Codeforces 318 div2.D Bear and Blocks(dp,贪心)
- codeforce之Bear and Two Paths
- Codeforces 14D Two Paths
- CodeForces 14D Two Paths
- codeforces 680D D. Bear and Tower of Cubes(dfs+贪心)
- Codeforces C - Bear and String Distance (贪心)
- CodeForces 385D Bear and Floodlight
- Codeforces 385 D Bear and Floodlight
- Codeforces Round #318-(D. Bear and Blocks)
- Codeforces Round #318 D. Bear and Blocks
- Log4J使用详解(整理)
- [机械键盘]Filco87 奶酪绿 FKBN87MRL/ECW2 开箱
- 依赖注入
- Http、TCP/IP、UDP
- WebSphere数据源中的连接被意外关闭案例
- Codeforces 673D Bear and Two Paths【贪心】
- Java中有关Null的注意事项
- 【译】Android 7.0 for Developers
- 性能优化:Trove集合库
- 在linux下安装JDK
- 2.12.1 求数列的和
- vue自定义日期组件
- 搭建ftp图片服务器,通过Nginx来显示
- 如何在android studio中添加so文件