제출 #751174

#제출 시각아이디문제언어결과실행 시간메모리
751174Hona_NguyenCyberland (APIO23_cyberland)C++17
컴파일 에러
0 ms0 KiB
#include "cyberland.h" #include <bits/stdc++.h> #pragma GCC optimize "Ofast" using namespace std; double sub_2_5(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr){ struct ii{ int id; double w; }; struct cmp{ bool operator () (ii A, ii B){ return A.w > B.w; } }; priority_queue<ii, vector<ii>, cmp> pq; vector<double> dp(N, (double)(1e15)); vector<vector<pair<int,int>>> G(N); for(int i=0;i<M;i++){ G[x[i]].push_back({y[i], c[i]}); G[y[i]].push_back({x[i], c[i]}); } dp[0] = 0; pq.push({0,dp[0]}); while(pq.size()){ ii u = pq.top(); pq.pop(); if(dp[u.id] < u.w) continue; for(pair<int,int> v: G[u.id]){ if(dp[u.id] + v.second < dp[v.first]){ dp[v.first] = dp[u.id] + v.second; pq.push({v.first, dp[v.first]}); } } } if(dp[H] == (double)(1e15)) dp[H] = -1; return dp[H]; } double sub_3_6(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr){ struct ii{ int id; double w; }; struct cmp{ bool operator () (ii A, ii B){ return A.w > B.w; } }; priority_queue<ii, vector<ii>, cmp> pq; vector<double> dp(N, (double)(1e15)); vector<vector<pair<int,int>>> G(N); for(int i=0;i<M;i++){ G[x[i]].push_back({y[i], c[i]}); G[y[i]].push_back({x[i], c[i]}); } dp[0] = 0; pq.push({0,dp[0]}); vector<bool> vis(N,false); queue<int> Q; Q.push(0); vis[0] = true; while(Q.size()){ int u = Q.front(); Q.pop(); for(pair<int,int> v: G[u]){ if(vis[v.first] == true || v.first == H) continue; vis[v.first] = true; Q.push(v.first); } } for(int i=1;i<N;i++){ if(arr[i] == 0 && vis[i] == true){ dp[i] = 0; pq.push({i,dp[i]}); } } while(pq.size()){ ii u = pq.top(); pq.pop(); if(dp[u.id] < u.w) continue; for(pair<int,int> v: G[u.id]){ if(dp[u.id] + v.second < dp[v.first]){ dp[v.first] = dp[u.id] + v.second; pq.push({v.first, dp[v.first]}); } } } if(dp[H] == (double)(1e15)) dp[H] = -1; return dp[H]; } double sub_1_4_7(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr){ struct ii{ int id; int div2; double w; }; struct cmp{ bool operator () (ii A, ii B){ return A.w > B.w; } }; priority_queue<ii, vector<ii>, cmp> pq; vector<vector<double>> dp(N, vector<double> (K+2, (double)(1e15))); vector<vector<pair<int,int>>> G(N); for(int i=0;i<M;i++){ G[x[i]].push_back({y[i], c[i]}); G[y[i]].push_back({x[i], c[i]}); } dp[0][0] = 0; pq.push({0,0,dp[0][0]}); vector<bool> vis(N,false); queue<int> Q; Q.push(0); vis[0] = true; while(Q.size()){ int u = Q.front(); Q.pop(); for(pair<int,int> v: G[u]){ if(vis[v.first] == true || v.first == H) continue; vis[v.first] = true; Q.push(v.first); } } for(int i=1;i<N;i++){ if(arr[i] == 0 && vis[i] == true){ dp[i][0] = 0; pq.push({i,0,dp[i][0]}); } } while(pq.size()){ ii u = pq.top(); pq.pop(); if(dp[u.id][u.div2] < u.w) continue; if(u.id == H) continue; for(pair<int,int> v: G[u.id]){ if(dp[u.id][u.div2] + v.second < dp[v.first][u.div2]){ dp[v.first][u.div2] = dp[u.id][u.div2] + v.second; pq.push({v.first, u.div2, dp[v.first][u.div2]}); } double tmp = (dp[u.id][u.div2] + v.second) / 2.0; if(u.div2 + 1 <= K && arr[v.first] == 2){ if(tmp < dp[v.first][u.div2+1]){ dp[v.first][u.div2+1] = tmp; pq.push({v.first, u.div2+1, dp[v.first][u.div2+1]}); } } } } double ans = (double)(1e15); for(int i=0;i<=K;i++) ans = min(ans, dp[H][i]); if(ans == (double)(1e15)) ans = -1; return ans; } double sub_8(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr){ struct ii{ int id; int div2; double w; }; struct cmp{ bool operator () (ii A, ii B){ return A.w > B.w; } }; priority_queue<ii, vector<ii>, cmp> pq; vector<vector<double>> dp(N, vector<double> (K+2, (double)(1e15))); vector<vector<int>> vis_go(N, vector<int> (K+2, 0)); vector<vector<pair<int,int>>> G(N); for(int i=0;i<M;i++){ G[x[i]].push_back({y[i], c[i]}); G[y[i]].push_back({x[i], c[i]}); } dp[0][0] = 0; pq.push({0,0,dp[0][0]}); vis_go[0][0] = 1; vector<bool> vis(N,false); queue<int> Q; Q.push(0); vis[0] = true; while(Q.size()){ int u = Q.front(); Q.pop(); for(pair<int,int> v: G[u]){ if(vis[v.first] == true || v.first == H) continue; vis[v.first] = true; Q.push(v.first); } } for(int i=1;i<N;i++){ if(arr[i] == 0 && vis[i] == true){ dp[i][0] = 0; vis_go[i][0] = 1; pq.push({i,0,dp[i][0]}); } } while(pq.size()){ ii u = pq.top(); pq.pop(); if(dp[u.id][u.div2] < u.w) continue; if(u.id == H) continue; for(pair<int,int> v: G[u.id]){ if(dp[u.id][u.div2] + v.second < dp[v.first][u.div2] && vis_go[v.first][u.div2+1] < 50){ dp[v.first][u.div2] = dp[u.id][u.div2] + v.second; vis_go[v.first][u.div2]++; pq.push({v.first, u.div2, dp[v.first][u.div2]}); } double tmp = (dp[u.id][u.div2] + v.second) / 2.0; if(u.div2 + 1 <= K && arr[v.first] == 2){ if(tmp < dp[v.first][u.div2+1] && vis_go[v.first][u.div2+1] < 50){ dp[v.first][u.div2+1] = tmp; vis_go[v.first][u.div2+1]++; pq.push({v.first, u.div2+1, dp[v.first][u.div2+1]}); } } } } double ans = (double)(1e15); for(int i=0;i<=K;i++) ans = min(ans, dp[H][i]); if(ans == (double)(1e15)) ans = -1; return ans; } double solve(int N, int M, int K, int H, std::vector<int> x, std::vector<int> y, std::vector<int> c, std::vector<int> arr){ int check_sub_2_5 = 0; for(int i=0;i<N;i++) check_sub_2_5 += (arr[i] == 1); if(check_sub_2_5 == N) return sub_2_5(N,M,K,H,x,y,c,arr); int check_sub_3_6 = 0; for(int i=0;i<N;i++) check_sub_3_6 += (arr[i] != 2); if(check_sub_3_6 == N) return sub_3_6(N,M,K,H,x,y,c,arr); if(K <= 30) return sub_1_4_7(N,M,K,H,x,y,c,arr); return sub_8(N,M,min(K,100),H,x,y,c,arr); } int main(){ freopen("cyberland.inp", "r", stdin); freopen("cyberland.out", "w", stdout); int tc; cin >> tc; while(tc--){ int N,M,K,H; cin >> N >> M >> K >> H; vector<int> x(M), y(M), c(M), arr(N); for(int i=0;i<N;i++) cin >> arr[i]; for(int i=0;i<M;i++) cin >> x[i] >> y[i] >> c[i]; cout << fixed << setprecision(12); cout << solve(N,M,K,H,x,y,c,arr) << endl; } }

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

cyberland.cpp: In function 'int main()':
cyberland.cpp:274:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  274 |     freopen("cyberland.inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cyberland.cpp:275:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  275 |     freopen("cyberland.out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccA10Hoi.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccAHc3jk.o:cyberland.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status