제출 #301810

#제출 시각아이디문제언어결과실행 시간메모리
301810infinite_iq슈퍼트리 잇기 (IOI20_supertrees)C++14
46 / 100
265 ms29048 KiB
#include <bits/stdc++.h> using namespace std ; #define pb push_back #define C continue typedef vector < int > vi ; typedef vector < vi > vivi ; #include "supertrees.h" vi v [100009] , comp ; int col [100009] , P [100009] , timer ; void dfs ( int node ) { if ( col [node] ) return ; col [node] = timer ; comp .pb ( node ) ; for ( auto u : v [node] ) dfs ( u ) ; } int construct(std::vector<std::vector<int>> p) { int n = p.size(); vivi ans ; for ( int i = 0 ; i < n ; i ++ ) { vi ret ( n , 0 ) ; ans .pb ( ret ) ; } for ( int i = 0 ; i < n ; i ++ ) { for ( int j = 0 ; j < n ; j ++ ) { if ( p [i][j] == 1 ) { v [i] .pb ( j ) ; } } } for ( int i = 0 ; i < n ; i ++ ) { if ( col [i] ) C ; timer ++ ; comp .clear () ; dfs ( i ) ; P [timer] = comp [0] ; if ( comp .size () == 1 ) C ; for ( int j = 0 ; j < ( int ) comp .size () - 1 ; j ++ ) { int a = comp [j] , b = comp [j+1] ; ans [a][b] = ans [b][a] = 1 ; } } timer = 0 ; for ( int i = 0 ; i < n ; i ++ ) { v [i] .clear () ; } for ( int i = 0 ; i < n ; i ++ ) { for ( int j = 0 ; j < n ; j ++ ) { if ( col [i] != col [j] && p [i][j] == 2 ) { v [P[col[i]]] .pb (P[col[j]]) ; } } } memset ( col , 0 , sizeof ( col ) ) ; for ( int i = 0 ; i < n ; i ++ ) { if ( col [i] ) C ; timer ++ ; comp .clear () ; dfs ( i ) ; if ( comp .size () == 1 ) C ; if ( comp .size () == 2 ) return 0 ; for ( int j = 0 ; j < ( int ) comp .size () - 1 ; j ++ ) { int a = comp [j] , b = comp [j+1] ; ans [a][b] = ans [b][a] = 1 ; } int a = comp [0] , b = comp .back () ; ans [a][b] = ans [b][a] = 1 ; } build ( ans ) ; return 1 ; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...