【CodeForces - 673D】Bear and Two Paths(构造,tricks)
題干:
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 city?b. There was no direct connection so he decided to take a long walk, visiting each city?exactly once. Formally:
- There is no road between?a?and?b.
- There exists a sequence (path) of?n?distinct cities?v1,?v2,?...,?vn?that?v1?=?a,?vn?=?b?and there is a road between?vi?and?vi?+?1?for?.
On the other day, the similar thing happened. Limak wanted to travel between a city?c?and a city?d. There is no road between them but there exists a sequence of?ndistinct cities?u1,?u2,?...,?un?that?u1?=?c,?un?=?d?and there is a road between?ui?and?ui?+?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 cities?a,?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.
Input
The first line of the input contains two integers?n?and?k?(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?integers?a,?b,?c?and?d?(1?≤?a,?b,?c,?d?≤?n).
Output
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 contain?ndistinct integers?v1,?v2,?...,?vn?where?v1?=?a?and?vn?=?b. The second line should contain?n?distinct integers?u1,?u2,?...,?un?where?u1?=?c?and?un?=?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?kdistinct roads or any other condition breaks. Note that?(x,?y)?and?(y,?x)?are the same road.
Examples
Input
7 11 2 4 7 3Output
2 7 1 3 6 5 4 7 1 5 4 6 2 3Input
1000 999 10 20 30 40Output
-1Note
In the first sample test, there should be?7?cities and at most?11?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條邊來構(gòu)造出這個圖。
這個圖有兩對起點和終點:第一對的起點a,終點b。第二對的起點c,終點d;
現(xiàn)在要求構(gòu)造出的圖,a和b之間沒有直接相連的邊,c和d之間沒有直接相連的邊。
但是從a到b有一條路徑,a作為起點,b作為終點,路徑上包含所有點(1.2.3.4.5..............N)。
同理,從c到d也有一條路徑,c作為起點,d作為終點,路徑上也包含所有點。
如果可以構(gòu)造出來,輸出這兩條路徑經(jīng)過的點;反之輸出-1。
解題報告:
? 因為是構(gòu)造題,并且要求能否在K條邊之內(nèi)構(gòu)造出來,所以肯定要構(gòu)造一個最少邊數(shù)的解。首先a為起點b為終點的肯定需要n-1條邊,c到d還需要連邊,所以肯定最少需要n條邊。但是n條邊肯定無法使得ac都可以當(dāng)起點,bd當(dāng)終點。所以需要n+1條邊,發(fā)現(xiàn)可以構(gòu)造,且總可以構(gòu)造,也就是a->c->a->...->b->d->b的一條路徑,即可滿足條件,并且第二個a和b中間必須要有點,這也就要求點數(shù)必須>5,否則不滿足ab不相鄰的條件,于是這樣構(gòu)造即可。?
AC代碼:
#include<cstdio> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<map> #include<vector> #include<set> #include<string> #include<cmath> #include<cstring> #define FF first #define SS second #define ll long long #define pb push_back #define pm make_pair using namespace std; typedef pair<int,int> PII; const int MAX = 2e5 + 5; int n,k,a,b,c,d; int main() {cin>>n>>k;cin>>a>>b>>c>>d;if(k < n+1 || n == 4) {printf("-1\n");return 0;} printf("%d %d ",a,c);for(int i = 1; i<=n; i++) {if(i == a || i == b || i == c || i == d) continue;printf("%d ",i); }printf("%d %d\n",d,b);printf("%d %d ",c,a);for(int i = 1; i<=n; i++) {if(i == a || i == b || i == c || i == d) continue;printf("%d ",i); }printf("%d %d\n",b,d);return 0 ; }?
總結(jié)
以上是生活随笔為你收集整理的【CodeForces - 673D】Bear and Two Paths(构造,tricks)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【HDU - 5961】传递(图,思维,
- 下一篇: 【HDU - 5886】Tower De