食物連鎖
制限時間: 1000ミリ秒 | メモリの制限: 10000K | |
合計提出: 108628 | 受け入れ: 32960 |
説明
動物界A、B、Cの動物の3種類があり、動物の食物連鎖の3つのタイプが面白い環を構成します。食品Bは、BがCを食べ、C Aを食べます
動物の前N、1-Nの数。各動物は親切で、B、Cであるが、我々は最終的にはそれを知らないの種類です。
:これは、N説明から成るこの栄養動物の2つのバージョンを用いて行った
、最初の引数が「1 X Y」であるXを表し、Yは類似しています。
2番目の引数が「2 X Y」であり、XはYを食べる表します
上記の二つの文を有するN個の動物のためのこの人は、文ずつの文はこの文、いくつかの真のいくつかの偽のK、Kを避けます。以下の三つの言葉の一つ、この文は嘘である場合には、真実はそうです。
1)現在の真の場合、前の競合のいくつかは、嘘である;
2)、次いで、現在のXまたはYがNよりも大きい場合、嘘である;
3)Xは、現在のX、食べる表し、嘘です。
ジョブは、N(1 <= N <=に従って与えられ 50,000) とKワード(0 <= K <= 100,000 )、 出力嘘の総数。
動物の前N、1-Nの数。各動物は親切で、B、Cであるが、我々は最終的にはそれを知らないの種類です。
:これは、N説明から成るこの栄養動物の2つのバージョンを用いて行った
、最初の引数が「1 X Y」であるXを表し、Yは類似しています。
2番目の引数が「2 X Y」であり、XはYを食べる表します
上記の二つの文を有するN個の動物のためのこの人は、文ずつの文はこの文、いくつかの真のいくつかの偽のK、Kを避けます。以下の三つの言葉の一つ、この文は嘘である場合には、真実はそうです。
1)現在の真の場合、前の競合のいくつかは、嘘である;
2)、次いで、現在のXまたはYがNよりも大きい場合、嘘である;
3)Xは、現在のX、食べる表し、嘘です。
ジョブは、N(1 <= N <=に従って与えられ 50,000) とKワード(0 <= K <= 100,000 )、 出力嘘の総数。
入力
スペースで区切られた2つの整数N及びKの最初の行、。
K次の3行はそれぞれ、Dは、引数の型を示す二つの数字の間のスペースで区切られた正整数D、X、Y、です。
D = 1の場合は、XとYが類似していることを示しています。
D = 2の場合、XはYを食べる表します
K次の3行はそれぞれ、Dは、引数の型を示す二つの数字の間のスペースで区切られた正整数D、X、Y、です。
D = 1の場合は、XとYが類似していることを示しています。
D = 2の場合、XはYを食べる表します
出力
唯一の嘘の数を表す1つの整数。
サンプル入力
100 7 1 101 1 2 1 2 2 2 3 2 3 3 1 1 3 2 3 1 1 5
サンプル出力
3
タイトル中国人は説明していない
私は(カードのscanf)のうちの3つまたは4つのWA、Tを作ったものの、それは、数の存在下でD []配列に注意を払うだろう紙に描く、まだ良い書き込みをこの問題を見てのように感じていますとき(dが[] + 3)%を忘れないでください 3、 私はdが唯一の3つの数字、1,2,0であることを確認したいので、
1はFAを表し、[i]は私が食べる
順番に2
民族0の2名の代表を
書式#include <iostreamの> の#include <cmath> の#include <cstdioを> する#include <CStringの> の#include < 文字列 > の#include <マップ> 書式#include <iomanip> 書式#include <アルゴリズム> 書式#include <キュー> の#include <スタック> #include < セット > の#include <ベクトル> // CONST int型MAXN = 1E5 + 5。 #defineは長い長いっ {(-1,11,11- b)はLLのGCDをリターン?B GCD(B、%の; B)} (-1,11,11- b)は{LLのLCM 戻り、(/ GCDを #define MAX INT_MAXの に#define(I、a、b)は(;;私は= Bの<++ I私は= INT)のためFOR の#defineバグはcout << "------------- - "<< ENDL 使用して 名前空間はstdを、 INT FA [ 51000 ]、D [ 51000 ]。 INT CNT、N、M。 int型(検索int型x)は { // バグを。 もし(x == FA [X])戻りX。 INTのルート= (FA [X])を探します。 D [X] =(D [X] + D [FA [X] + 3)%3 。 戻り FA [X] = ルートと、 } int型メイン() { IOS :: sync_with_stdio(偽)。 scanf関数(" %d個の%のD "、&N、&M)。 (I、FOR 1、N)FA [I] = I。 (I、FOR 1 、M) { int型K、X、Y。 scanf関数(" %D%D%D "、&K、およびX&Y)。 もし(X> N || Y> N){CNT ++。引き続き;} 場合(k個の== 2 &&のx == y)は{CNT ++。引き続き;} int型の FX = 検索(X) int型年度=(y)を見つけます。 もし(FX == 年度) { int型の TEMP = D [X] - D [Y]。 もし(K == 1!&& TEMP = 0 ) { CNT ++ 。 続け; } そう であれば(k個の== 2 ) { もし、((D [X] -d [Y] + 3)%3 =!2)CNT ++ 。 } } 他 { 場合(k個の== 1) { FA [FY] = FX。 D [FY] =(D [X] - D [Y] + 3)%3 。 } そう であれば(k個の== 2 ) { FA [FY] = FX。 D [FY] =(D [X] - D [Y] + 1 + 3)%3 。 } } } のprintf(" %d個の\ n " 、CNT)。 }