제출 #427570

#제출 시각아이디문제언어결과실행 시간메모리
427570markthitrin장난감 기차 (IOI17_train)C++14
23 / 100
984 ms64924 KiB
#include "train.h" #include <vector> #include <iostream> int N,M; std::vector<int> f[5005]; std::vector<int> inv_f[5005]; std::vector<int> ans; int degree[5005]; int m[5005]; bool come[5005]; bool reachable[5005]; bool visit[5005]; void inv_bfs(std::vector<int>& a,int pos){ if(come[pos]) return; come[pos] = true; for(int q = 0;q<inv_f[pos].size();q++){ m[inv_f[pos][q]]++; if(a[inv_f[pos][q]] == 0 && degree[inv_f[pos][q]] == m[inv_f[pos][q]]){ inv_bfs(a,inv_f[pos][q]); } else if(a[inv_f[pos][q]] == 1) inv_bfs(a,inv_f[pos][q]); } } void bfs(std::vector<int>& a,int pos){ if(visit[pos]) return; visit[pos] =true; for(int q = 0 ;q<f[pos].size();q++){ if(come[f[pos][q]]){ reachable[f[pos][q]] = true; bfs(a,f[pos][q]); } } } void last_func(std::vector<int> a,int pos){ if(a[pos] == 0 && m[pos] != degree[pos] && !reachable[pos]) return; if(ans[pos] == 1) return; ans[pos] = 1; for(int q = 0 ;q<inv_f[pos].size();q++){ m[inv_f[pos][q]]++; last_func(a,inv_f[pos][q]); } } std::vector<int> who_wins(std::vector<int> a, std::vector<int> r, std::vector<int> u, std::vector<int> v) { N = a.size(); M = u.size(); for(int q = 0 ;q<N;q++){ ans.push_back(0); } for(int q = 0 ;q<M;q++){ f[u[q]].push_back(v[q]); inv_f[v[q]].push_back(u[q]); degree[u[q]]++; } for(int q = 0;q<N;q++){ if(r[q]){ for(int w = 0 ;w<N;w++){ m[w] = 0; come[w] = false; visit[w] = false; } inv_bfs(a,q); bfs(a,q); } } for(int w = 0;w<N;w++){ m[w] = 0; } for(int q= 0;q<N;q++){ if(reachable[q]) last_func(a,q); } return ans; } /* 2 4 0 1 1 0 0 0 0 1 1 0 1 1 1 1 */

컴파일 시 표준 에러 (stderr) 메시지

train.cpp: In function 'void inv_bfs(std::vector<int>&, int)':
train.cpp:17:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 |     for(int q = 0;q<inv_f[pos].size();q++){
      |                   ~^~~~~~~~~~~~~~~~~~
train.cpp: In function 'void bfs(std::vector<int>&, int)':
train.cpp:30:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |     for(int q = 0 ;q<f[pos].size();q++){
      |                    ~^~~~~~~~~~~~~~
train.cpp: In function 'void last_func(std::vector<int>, int)':
train.cpp:43:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |     for(int q = 0 ;q<inv_f[pos].size();q++){
      |                    ~^~~~~~~~~~~~~~~~~~
#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...