답안 #574613

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
574613 2022-06-08T23:14:54 Z definitelynotmee 장난감 기차 (IOI17_train) C++
11 / 100
508 ms 1692 KB
#include<bits/stdc++.h>
#include"train.h"
#define ff first
#define ss second
#define all(x) x.begin(), x.end()
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
template<typename T>
using matrix = vector<vector<T>>;

std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) {
	int owned = accumulate(all(a),0);
    int n = a.size(), m = u.size();
    vector<int> resp(n);
    matrix<int> g(n), rev(n);
    for(int i = 0; i < m; i++){
        g[u[i]].push_back(v[i]);
        rev[v[i]].push_back(u[i]);
    }
    if(owned == n){
        for(int i = 0; i < n; i++){
            if(!r[i])
                continue;
            vector<int> reach(n), reachedby(n);
            auto dfs =[&](int id, auto dfs)->void{
                reach[id] = 1;
                for(int i : g[id])
                    if(!reach[i]) dfs(i,dfs);
            };
            auto rdfs =[&](int id, auto dfs)->void{
                reachedby[id] = 1;
                for(int i : rev[id])
                    if(!reachedby[i]) dfs(i,dfs);
            };
            for(int j : g[i])
                dfs(j,dfs);
            for(int j : rev[i])
                rdfs(j,rdfs);
            if(reach[i]){
                for(int j = 0; j < n; j++)
                    resp[j]|=reachedby[j];
            }
        }       
        
    } else if(owned == 0){
        for(int i = 0; i < n; i++){
            if(r[i])
                continue;
            vector<int> reach(n), reachedby(n);
            auto dfs =[&](int id, auto dfs)->void{
                reach[id] = 1;
                for(int i : g[id])
                    if(!reach[i] && !r[i]) dfs(i,dfs);
            };
            auto rdfs =[&](int id, auto dfs)->void{
                reachedby[id] = 1;
                for(int i : rev[id])
                    if(!reachedby[i]) dfs(i,dfs);
            };
            for(int j : g[i])
                dfs(j,dfs);
            for(int j : rev[i])
                rdfs(j,rdfs);
            if(reach[i]){
                for(int j = 0; j < n; j++)
                    resp[j]|=reachedby[j];
            }
        } 
        for(int& i : resp)
            i^=1;
    }
	return resp;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 1108 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 212 KB 3rd lines differ - on the 2nd token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 46 ms 1692 KB Output is correct
2 Correct 88 ms 1676 KB Output is correct
3 Correct 132 ms 1660 KB Output is correct
4 Correct 508 ms 1588 KB Output is correct
5 Correct 95 ms 1556 KB Output is correct
6 Correct 102 ms 1492 KB Output is correct
7 Correct 499 ms 1512 KB Output is correct
8 Correct 7 ms 1492 KB Output is correct
9 Correct 7 ms 1492 KB Output is correct
10 Correct 10 ms 1504 KB Output is correct
11 Correct 10 ms 1356 KB Output is correct
12 Correct 7 ms 1364 KB Output is correct
13 Correct 8 ms 1584 KB Output is correct
14 Correct 8 ms 1620 KB Output is correct
15 Correct 8 ms 1620 KB Output is correct
16 Correct 8 ms 1532 KB Output is correct
17 Correct 8 ms 1472 KB Output is correct
18 Correct 306 ms 1332 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 40 ms 1364 KB Output is correct
2 Incorrect 308 ms 1468 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 1388 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 4 ms 1108 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -