제출 #241465

#제출 시각아이디문제언어결과실행 시간메모리
241465kartelMag (COCI16_mag)C++14
48 / 120
505 ms142200 KiB
#include <bits/stdc++.h> //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> #define in(x) freopen(x, "r", stdin) #define out(x) freopen(x, "w", stdout) #pragma GCC optimize("Ofast") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("-O3") #define F first #define S second #define pb push_back #define N +1000500 #define M ll(1e9 + 7) #define sz(x) (int)x.size() #define re return #define oo ll(1e9) #define el '\n' #define pii pair <int, int> #define err ld(1e-9) #define last(x) x.back() #define all(x) (x.begin(), x.end()) using namespace std; //using namespace __gnu_pbds; //typedef tree <int, null_type, less_equal <int> , rb_tree_tag, tree_order_statistics_node_update> ordered_set; typedef long long ll; typedef long double ld; int f[N], i, n, u, v; ll c[N], a, b; vector <int> g[N]; void dfs(int v, int pr) { f[v] = (c[v] == 1); for (auto u : g[v]) { if (u == pr) continue; dfs(u, v); if (f[v]) f[v] = max(f[u] + 1, f[v]); } } void DFS(int v, int pr, int to) { int mx[2]; mx[0] = to; mx[0] = 0; for (auto u : g[v]) { if (u == pr) continue; if (f[u] > mx[0]) swap(mx[0], mx[1]), mx[0] = f[u]; else if (f[u] > mx[1]) mx[1] = f[u]; } ll A = c[v]; ll B = mx[0] + mx[1] + 1; // cerr << v << ":" << A << " " << B << el; ll gcd = __gcd(A, B); A /= gcd; B /= gcd; if (A * b < a * B) a = A, b = B; for (auto u : g[v]) { if (u == pr) continue; int nto = 0; if (c[v] == 1) { nto++; if (f[u] == mx[0]) nto += mx[1]; else nto += mx[0]; } DFS(u, v, nto); } } int main() { srand(time(0)); ios_base::sync_with_stdio(0); iostream::sync_with_stdio(0); ios::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); // in("input.txt"); // out("output.txt"); cin >> n; for (i = 1; i < n; i++) { cin >> u >> v; g[v].pb(u); g[u].pb(v); } a = 1e9; b = 1; for (i = 1; i <= n; i++) cin >> c[i], a = min(a, c[i]); dfs(1, -1); DFS(1, -1, 0); cout << a << "/" << b; } // //00000 //00110 //00111 //00011 //00000

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

mag.cpp: In function 'void DFS(int, int, int)':
mag.cpp:61:18: warning: '*((void*)& mx +4)' may be used uninitialized in this function [-Wmaybe-uninitialized]
     ll B = mx[0] + mx[1] + 1;
            ~~~~~~^~~~~~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...