リンク:https://codeforces.com/contest/1169/problem/B
質問の意味:
ヒキガエルイワンが有する m個の整数のm個の対を、各整数の間にある 1 1及び N、N、包括。対である (1 、B 1 )、(2 、B 2 )、... 、(M 、BのM )(A1、B1)、(A2、B2)、···、(AM、BM)。
二つの整数が存在する場合、彼は確認するように求められ 、Xの Xと Yの Y(1 ≤ X < Y ≤ N 1≤x<y≤n)各所与の対における少なくとも一つの整数に等しくなるように 、X、Xまたは Y Y。
アイデア:
検討二つの別々の、例えば、(1,2)と完全に同一 - このペア、xおよびyは、2つのペアを取ることができるとき(3,4)、となるように第1のベクトルのレコードに登場チーム、チームは、チームがすべてをカバーしていることを示す、見つからない場合はありません、それは問題ではない見つけるように見えました。
これらの値の4つまで、次に列挙、見つけるために一つずつ。
しかし、他の人は、それが私には思われる考えは同じではありません
コード:
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 typedefの長い長いLL。 const int型MAXN = 3E5 + 10。 const int型MOD = 1E9 + 7。 対<整数、整数>ノード[MAXN]。 int型ディス[MAXN]。 N INT、M、K、T。 int型のP、Q、U、V; INT X、Y、Z、W。 BOOL SERCH(INT A、INT B) { ための(I = 1をint型; I <= M; iが++) { !IF(ノード[i]が1次回= &&ノード[i]が1次回= B &&ノード[I !!] .second = &&ノード[i]は.second = b)は falseを返します。 } trueを返します。 } int型のmain() { CIN >> N >> M。 ベクトル<整数> SER。 ブールフラグ= TRUE。 { CIN >>ノード[i]が1次回>>ノード[i]は.second。 / * ディス[ノード[i]が1次回] ++; IF((DIS [ノード[i]が1次回] == 1つの&&フラグ)) { ser.push_back(ノード[i]が1次回)。 IF(ser.size()== 4) フラグ= FALSE。 } ディス[ノード[i]は.second] ++; IF((DIS [ノード[i]は.second] == 1 &&フラグ)) { ser.push_back(ノード[I] .second)。 IF(ser.size()== 4) フラグ= FALSE。 } * / IF(ser.size()<4) { BOOLのF = TRUE。 (INT J = 0; J <ser.size(); J ++)のための (ノード[i]が1次回== SER [J])であれば 偽F =。 (INT J = 0; J <ser.size(); J ++)のための (ノード[I] .second == SER [J])であれば 偽F =。 IF(F) ser.push_back(ノード[i]が1次回)、ser.push_back(ノード[I] .second)。 } } フラグ= FALSE。 // COUT << SERCH(2、4)<< ENDL。 //(自動X:SER)のために // coutの<< X << ''; // coutの<<てendl; (; iがser.sizeを()<I ++はiが0 = INT)のための (int型J = I + 1、J <ser.size(); J ++)のために (SERCH(IF SER [i]は、 フラグ= TRUE。 IF(フラグ) COUT << "YES" << ENDL。 他の 裁判所未満<< "NO" <<てendl; 0を返します。 }