제출 #908069

#제출 시각아이디문제언어결과실행 시간메모리
908069nightfalSimurgh (IOI17_simurgh)C++14
0 / 100
1 ms856 KiB
#include <cstdio> #include <iostream> #include <cassert> #include <vector> #include <cstdlib> #include <string> using namespace std; static int MAXQ = 30000; static int n, m, q = 0; static vector<int> u, v; static vector<bool> goal; std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v); int count_common_roads(const std::vector<int>& r); bool isSubtask1(int n) {return n<=7;} bool isSubtask2(int n) {return n<=50;} bool isSubtask3(int n) {return n<=240;} bool hasBackEdge(int parent, int now, std::vector<int>& visit, std::vector<vector<int>>& edgeL) { for(int elem: edgeL[now]) { if (elem==parent) continue; if (visit[elem] || hasBackEdge(now,elem,visit,edgeL)) return true; } return false; } bool isTree(std::vector<int>& edges, std::vector<int>& u, std::vector<int>& v) { n = edges.size()+1; std::vector<vector<int>> edgeL(n); std::vector<int> connect(n,0); for(int i=0; i<n-1; i++) { int idx = edges[i]; edgeL[u[idx]].push_back(v[idx]); edgeL[v[idx]].push_back(u[idx]); connect[u[idx]] = connect[v[idx]] = 1; } cout << "edge List\n"; for(int i=0; i<n; i++) { printf("%d: ", i); for(int elem: edgeL[i]) printf("%d ",elem); cout << endl; } for(int i=0; i<n; i++) if(connect[i]==0) return false; vector<int> visit(n,0); visit[0] = 1; int parent = 0, now = 0; if (!hasBackEdge(parent,now,visit,edgeL)) return true; else return false; } bool selectEdges(int cnt, int start, int n, int m, std::vector<int>& edges, std::vector<int>& u, std::vector<int>& v){ if (cnt == n-1 && isTree(edges,u,v) && count_common_roads(edges)==n-1) return true; for(int i=start; i<m; i++){ edges[cnt] = i; if (selectEdges(cnt+1,i+1,n,m,edges,u,v)) return true; } return false; } std::vector<int> subtask1(int n, std::vector<int>& u, std::vector<int>& v) { int m = u.size(); std::vector<int> r(n-1); if(selectEdges(0,0,n,m,r,u,v)) return r; } std::vector<int> find_roads(int n, std::vector<int> u, std::vector<int> v) { // if (isSubtask1(n)) return subtask1(n,u,v); std::vector<int> r(n - 1); for(int i = 0; i < n - 1; i++) r[i] = i; int common = count_common_roads(r); if(common == n - 1) return r; r[0] = n - 1; return r; }

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

simurgh.cpp: In function 'bool isTree(std::vector<int>&, std::vector<int>&, std::vector<int>&)':
simurgh.cpp:45:9: warning: this 'for' clause does not guard... [-Wmisleading-indentation]
   45 |         for(int elem: edgeL[i]) printf("%d ",elem); cout << endl;
      |         ^~~
simurgh.cpp:45:53: note: ...this statement, but the latter is misleadingly indented as if it were guarded by the 'for'
   45 |         for(int elem: edgeL[i]) printf("%d ",elem); cout << endl;
      |                                                     ^~~~
simurgh.cpp: In function 'std::vector<int> subtask1(int, std::vector<int>&, std::vector<int>&)':
simurgh.cpp:68:1: warning: control reaches end of non-void function [-Wreturn-type]
   68 | }
      | ^
simurgh.cpp: At global scope:
simurgh.cpp:12:18: warning: 'q' defined but not used [-Wunused-variable]
   12 | static int n, m, q = 0;
      |                  ^
simurgh.cpp:12:15: warning: 'm' defined but not used [-Wunused-variable]
   12 | static int n, m, q = 0;
      |               ^
simurgh.cpp:10:12: warning: 'MAXQ' defined but not used [-Wunused-variable]
   10 | static int MAXQ = 30000;
      |            ^~~~
#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...