답안 #574598

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
574598 2022-06-08T22:28:22 Z definitelynotmee 장난감 기차 (IOI17_train) C++
11 / 100
534 ms 1536 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];
            }
        }      
    }
	return resp;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 980 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 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 1492 KB Output is correct
2 Correct 93 ms 1516 KB Output is correct
3 Correct 137 ms 1536 KB Output is correct
4 Correct 534 ms 1476 KB Output is correct
5 Correct 103 ms 1424 KB Output is correct
6 Correct 79 ms 1396 KB Output is correct
7 Correct 517 ms 1372 KB Output is correct
8 Correct 8 ms 1364 KB Output is correct
9 Correct 6 ms 1364 KB Output is correct
10 Correct 10 ms 1368 KB Output is correct
11 Correct 7 ms 1236 KB Output is correct
12 Correct 7 ms 1236 KB Output is correct
13 Correct 7 ms 1364 KB Output is correct
14 Correct 7 ms 1492 KB Output is correct
15 Correct 8 ms 1492 KB Output is correct
16 Correct 7 ms 1360 KB Output is correct
17 Correct 7 ms 1388 KB Output is correct
18 Correct 320 ms 1220 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 38 ms 1236 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 1364 KB 3rd lines differ - on the 1st token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 980 KB 3rd lines differ - on the 14th token, expected: '1', found: '0'
2 Halted 0 ms 0 KB -