説明
N(1≤ N ≤100)牛、便利な1 ...の番号Nは、プログラミングのコンテストに参加しています。我々はすべて知っているように、いくつかの牛は他より良いコード。それぞれの牛は、競合他社の中で一意であるある一定のスキルの評価を持っています。
コンテストは2頭の間で、それぞれ、いくつかの頭に頭のラウンドで行われます。牛の場合、Aは牛よりも高いスキルレベル有し、B(1≤ A ≤ N ; 1≤ B ≤ N ; ≠ Bを)、次いで牛Aは常に牛ビートますBを。
ファーマージョンはスキルレベルによって牛をランク付けしようとしています。結果リスト所定のM(1≤ M 4,500≤)二牛のラウンドは、そのランク結果から正確に決定することができる牛の数を決定します。ラウンドの結果が矛盾しなくなることが保証されます。
入力
* 1行目:二スペース区切りの整数:N及びM
*行2 .. M +1:各行は、競合及び結果を記載する2スペースで区切られた整数(最初の整数、含まAは単一のを、勝者です)競争のラウンド:AとB
出力
* 1行目:ランクを決定することができる牛の数を表す単一の整数
サンプル入力
5 4 3 4 2 3 2 1 2 2 5
サンプル出力
2
ソース
アイデア:この質問はポイントフロイトによって互いにポイントとの関係を構築、トポロジ図を構築するために使用されます。ランキングを決定することができない(独自の描画) - あなたはこの時点と他のすべての点の間の関係を決定することができた場合は、それはそれ以外の場合は、関係を確立することができない、明確なランキングポイントです。
書式#include <cstdioを> する#include <iostreamの> の#include < 文字列 > の#include <CStringの> の#include <cmath> の#include <アルゴリズム> 書式#include <キュー> の#include <ベクトル> の#include <マップ> 使用して 名前空間はstd; #defineっ長い長いのconst int型 INF = 0x3f3f3f3f 。 INTの N、M、DIS [ 100 + 8 ] [ 100 + 8 ]。INT メイン() { int型、B。 memset(DIS、0、はsizeof (DIS))。 scanf関数(" %d個の%のD "、&N、&M)。 以下のために(int型 I = 0 ; iが<M; iが++ ) { scanf関数(" %D%D "、&、&B)。 DIS [A] [B] = 1 。 DIS [B] [A] = - 1 。 } のために(int型 i = 1 ; iがn = <I ++ ) のための(INT J = 1 ; J <= N; J ++) のための(int型のk = 1 ; kは<= nであり、k ++ ) 場合(DIS [J] [I] == DIS [i]が[K] && DIS [J] [I]) { DIS [J] [K] = DIS [i]は[K]。 } INT ANS = 0 、合計。 以下のために(int型 i = 1 ; iが<= N; iは++ ) { 和 = 0 。 以下のための(int型 J = 1 ; J <= nであり、j ++ ) であれば!(DIS [i]の[J] = 0) 合計 ++ ; もし(合計== N- 1)ANS ++ ; } のprintf(" %d個の\ n " 、ANS)。 リターン 0 ; }