제출 #822571

#제출 시각아이디문제언어결과실행 시간메모리
822571Hanksburger사이버랜드 (APIO23_cyberland)C++17
68 / 100
1583 ms399708 KiB
#include "cyberland.h" #include <bits/stdc++.h> using namespace std; vector<pair<long long, long double> > adj[3100005]; priority_queue<pair<long double, long long> > pq; long long final[3100005], ok[100005], h; long double dist[3100005]; void dfs(long long u) { ok[u]=1; for (long long i=0; i<adj[u].size(); i++) { long long v=adj[u][i].first; if (ok[v] || v==h) continue; dfs(v); } } double solve(int n, int m, int k, int hh, vector<int> x, vector<int> y, vector<int> c, vector<int> a) { h=hh; k=min(k, 30); for (long long i=0; i<(k+1)*n; i++) adj[i].clear(); for (long long i=0; i<m; i++) { for (long long j=0; j<=k; j++) { adj[j*n+x[i]].push_back({j*n+y[i], (long double)c[i]/(1LL<<(k-j))}); adj[j*n+y[i]].push_back({j*n+x[i], (long double)c[i]/(1LL<<(k-j))}); } } for (long long i=0; i<n; i++) ok[i]=0; dfs(0); for (long long i=0; i<m; i++) { for (long long j=0; j<k; j++) { if (a[x[i]]==2 && ok[x[i]] && ok[y[i]]) adj[j*n+y[i]].push_back({(j+1)*n+x[i], (long double)c[i]/(1LL<<(k-j))}); if (a[y[i]]==2 && ok[x[i]] && ok[y[i]]) adj[j*n+x[i]].push_back({(j+1)*n+y[i], (long double)c[i]/(1LL<<(k-j))}); } } for (long long i=0; i<(k+1)*n; i++) { dist[i]=1e18; final[i]=0; } dist[0]=0; pq.push({0, 0}); for (long long i=1; i<n; i++) { if (!a[i] && ok[i]) { dist[i]=0; pq.push({0, i}); } } while (!pq.empty()) { long long u=pq.top().second; pq.pop(); if (final[u]) continue; final[u]=1; for (long long i=0; i<adj[u].size(); i++) { long long v=adj[u][i].first; long double w=adj[u][i].second; if (dist[u]+w<dist[v]) { dist[v]=dist[u]+w; pq.push({-dist[v], v}); } } } long double ans=1e18; for (long long i=0; i<=k; i++) ans=min(ans, dist[i*n+h]*(1LL<<(k-i))); if (ans<5e17) return ans; else return -1; }

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

cyberland.cpp: In function 'void dfs(long long int)':
cyberland.cpp:11:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long double> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   11 |     for (long long i=0; i<adj[u].size(); i++)
      |                         ~^~~~~~~~~~~~~~
cyberland.cpp: In function 'double solve(int, int, int, int, std::vector<int>, std::vector<int>, std::vector<int>, std::vector<int>)':
cyberland.cpp:68:30: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long double> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   68 |         for (long long i=0; i<adj[u].size(); i++)
      |                             ~^~~~~~~~~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...