https://codeforces.com/contest/1230/problem/D
アイデアは:そう、すべての関係が含まれている必要があり、状況を満たすために、確かになります同じの2下さい。X場合| Y = xの場合、xがyのが含まれています。
#include <CStringの> する#include <アルゴリズム> の#include <ベクトル> の#include <地図> の#include <キュー> の#include <cstdioを> する#include <スタック> の#include <cmath> の#include <iostreamの> する#include < 設定 > #defineは長い長いっ の#define - (X)lowbit(x)は、x& 使用して 名前空間、STD 構造体の点 { LLのX。 LLのY。 } [ 10000 ]。 マップ <LL、int型 > 融点; メイン() { int型のn; scanf関数(" %のD "、&N) 以下のために(int型 i = 1 ; iが<= N; iが++ ) { scanf関数(" %のLLDを"&[I] .X)。 MP [[i]は.X] ++ ; } のための(int型 i = 1 ; iが<= N iが++ ) のscanf(" %のLLD "、および[I] .Y)。 LL ANS = 0 。 セット < 整数 > SS。 以下のために(地図<LL、整数 > ::イテレータT = mp.begin();!T = mp.end(); T ++ ) { 場合(T->第> = 2 ) { ため(int型 I = 1 ; I <= N; iは++ ) { もし、((T->第一| [I] .X)== T-> 最初) ss.insert(I)。 } } } 用(セット < 整数 > ::イテレータトン= ss.begin();!T = ss.end(); T ++ ) { // のprintf( "%d個の\ n"は、*トン)。 INT O =(* T)。 ANS + =[O] .Y。 } のprintf(" %LLDする\ n " 、ANS)。 }