牛やスナック(吃点心 - 图论转换)Codeforcesラウンド#584 - ダーシャコード選手権 - エリミネーションラウンド(。。皆のためのオープン定格、ディビジョン1 +ディビジョン2)

質問の意味:https://codeforc.es/contest/1209/problem/D

n個のデザートがありますが、kの個人が存在し、誰もが2つのお気に入りのスナックを持っている、そして今彼らにランク付けしチームを与える限り、誰もが自分の好きなスナックを持っているように、食べるために人は人に食われる(残されることはありません)。

誰かが幸せではない場合は、少なくとも不幸な人を配置する方法を尋ねる、食べるために何もできなくなります。

アイデア:

グラフ問題として、デザートは、人がエッジであるノードです。通信の各ブロックについて、常に2つのスナックを食べている、他の人が(ここで、他の人が食べられます)を食べます。

これは、最適な、すべての答えがそれぞれ接続された通信ブロック番号X-1である保証します。

  1つ の#define IOSはios_base :: sync_with_stdio(0)。cin.tie(0)。
  2の#include <cstdioを> // のsprintf islowerはisupper 
  3の#include <cstdlib> // のmalloc出口STRCATのitoaはシステム( "CLS")
  4の#include <入出力ストリーム> // 
  5の#include <fstreamの> // freopenは(「C :\\ユーザー\\ 13606 \\デスクトップ\\草稿.TXT」、 "R"、STDIN); 
  6の#include <ビットセット>
   7  // の#include <地図>
   8  // の#include <unordered_map> 
  9の#include <ベクトル>
 10の#include <積層>
12の#include < 文字列・H> // はstrstr SUBSTR 
13の#include < ストリング >
 14の#include <TIME.H> // にsrand(((符号なし)時間(NULL)))。シードN =ランド()%10から0〜9。
15の#include <cmath>
 16の#include <両端キュー>
 17の#include <キュー> // PRIORITY_QUEUE <整数、ベクトル<整数>、大きな<整数>> Q。// 以下
18の#include <ベクトル> // emplace_back
 19  // の#include <math.h>の
 20  // の#include <WINDOWS.H> // (+ LEN)逆。〜!〜!
21の#include <アルゴリズム> // ソート+ユニーク:SZ =一意(B + 1、B + N + 1) - (B + 1)+ nth_element(第一、第nは、最後に、比較)
22  使用 名前空間 STDを、// next_permutation(A + 1、A + 1個の+ N)。// prev_permutation 
23  の#define RINTは整数レジスタ
 24  の#defineを foは(A、B、C)(RINTのA = B; <= C; ++ A)のための
 25  の#define FR(A、B、C)のための(RINT A = B;> = C; - A)
 26  の#define MEM(A、B)のmemset(A、B、はsizeof(A))
 27回 の#define PRのprintf
 28回 の#define SCのscanf
 29回 の#defineのLS RT << 1
30回 の#defineのRS RT << 1 | 1
 31 typedefの長い 長いLL。
32  ボイド swapp(INT&A、INTB)。
33  ダブル fabss(ダブルA)。
34  int型 MAXX(int型int型のB)。
35  INTミネソタ州(INT A、INT B)。
36  INT Del_bit_1(int型N);
37  INT lowbit(INT N)。
38の int型の ABS面(int型A);
39  constの ダブル E = 2.718281828 ;
40  のconst  ダブル PI = ACOS( - 1.0 )。
41  // CONST LL INF =(1LL << 60)。
42  のconst  int型 INF =(1 << 30 )。
43  CONST  ダブル ESP = 1E- 9 44  CONST  INT MOD =(INT)1E9 + 7 45  のconst  int型 N =(INT)1E6 + 10 46  
47  BOOLF [N] である[N]。
48ベクトル<ベクトル< 整数 >> G(N)。
49  
50  INT BFS(INT 開始)
 51  {
 52      であれば(F [開始])リターン 1 53      INTの和= 0 54      キュー< 整数 > Q;
55      q.push(スタート)。
56      ながら(!q.empty())
 57      {
 58          INT今= q.front(); q.pop()。
59          であれば([今F)続行;
60          F [今] = 1 61          合計++ ;
62          INT SZ = G [今] .size()。
63          のためには、int型 i = 0 ; iはSZを<; ++ I)
 64              q.push([今] G [I])。
65      }
 66      リターン和。
67  }
 68  
69  INT ()は、メイン
 70  {
 71      int型N、K。
72      SC(" %d個の%のD "、&​​N&K)。
73      のためにint型 = Iを1 ; iは= Kを<; ++ I)
 74      {
 75          INT U、V。
76          SC(" %D%dの"、&​​U、およびV)。
77           [U] = である [V] = 1 78          G [U] .push_back(V)。
79          G [V] .push_back(U)。
80      }
 81      INT ANS = 0 82      のためにint型 I = 1 ++; iが<= N I)
 83          であればれる[i])と
 84             ANS + = BFS(I) - 1 85の      PR(" %d個の\ n "、K- ANS)。
86      リターン 0 ;
87  }
 88  
89  / * ******************************************** **************************************** * / 
90  
91  int型 MAXX(int型int型b)の
 92  {
 93      リターン A> B?A:B;
94  }
 95  
96  空隙 swapp(INT&A、INTB)
97  {
 98      、A ^ = B ^ = A ^ = B。
99  }
 100  
101  INTの lowbit(int型N)
 102  {
 103      リターン N&( - N)。
104  }
 105  
106  INT Del_bit_1(int型N)
 107  {
 108      リターン N・(N- 1 )。
109  }
 110の 
111  INTの ABS面(INT A)
 112  {
 113      戻り A> 0: - ? 114 }
 115  
116  ダブル fabss(ダブルA)
 117  {
 118      戻り A> 0: - ? 119  }
 120  
121  INTミネソタ州(INT A、INT B)
 122  {
 123      リターン <B?A:B;
124 }

 

おすすめ

転載: www.cnblogs.com/--HPY-7m/p/11529740.html