제출 #1310178

#제출 시각아이디문제언어결과실행 시간메모리
1310178og_matveychick1통행료 (APIO13_toll)C++20
34 / 100
971 ms16392 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/rope> using namespace std; using namespace __gnu_pbds; using namespace __gnu_cxx; // /* // //////////**DEFINES - START**////////// #define ret return #define fi first #define se second #define mp make_pair #define all(x) x.begin(), x.end() #define be(x) x.begin() #define en(x) x.end() #define sz(x) ll(x.size()) #define for0(i, n) for (ll i = 0; i < (n); ++i) #define for1(i, n) for (ll i = 1; i < (n); ++i) #define rfor0(i, n) for (ll i = (n) - 1; i >= 0; --i) #define rfor1(i, n) for (ll i = (n) - 1; i >= 1; --i) #define rep(i, a, n) for (ll i = a; i < ll(n); ++i) #define rrep(i, a, n) for (ll i = a - 1; i >= ll(n); --i) #define popcount __builtin_popcountll #define fastIO() ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); #define con continue #define pb push_back #define pob pop_back #define deb(x) cout << (#x) << " is " << (x) << endl #define ins insert #define len(s) (s).length() #define gi greater<int>() #define gll greater<ll >() #define gstr greater<string>() #define gpll greater<pair<ll , ll >>() #define rast(x1, y1, x2, y2) sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)) #define rev reverse #define ub upper_bound #define lb lower_bound #define bs binary_search #define rs resize #define last(a) a.back() #define co count #define ba(a) a.back() #define um unordered_map #define rsun(a) a.resize(unique(a.begin(), a.end())-a.begin()) #define endl '\n' #ifdef OG_Matveychick1 bool local = true; #else bool local = false; #endif // \\\\\\\\\\**DEFINES - END**\\\\\\\\\\ // */ // /* // //////////**TYPEDEFS - START**////////// typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<char> vc; typedef pair<int, int> pii; typedef vector<pii> vpii; typedef vector<string> vs; typedef long long ll; typedef unsigned long long ull; typedef vector<ull> vull; typedef pair<ll, ll> pll; typedef vector<ll> vll; typedef vector<pll> vpll; typedef pair<double, double> pdd; typedef double ld; typedef double D; typedef vector<ld> vld; typedef vector<pair<ld, ld> > vpld; typedef string str; typedef set<ll> sll; typedef set<int> si; typedef set<str> ss; typedef set<pii> spii; typedef multiset<int> msi; typedef multiset<ll> msll; typedef multiset<str> mss; typedef multiset<pii> mspii; typedef multiset<pll> mspll; typedef map<str, str> mps; typedef map<int, int> mpi; typedef map<ll, ll> mpll; typedef map<int, vi> mpvi; typedef map<int, vll> mpvll; typedef map<char, int> mpci; typedef multimap<ll, ll> mmpll; typedef multimap<str, str> mmps; typedef multimap<int, int> mmpi; typedef vector<vector<int> > vvi; typedef vector<vector<ll> > vvll; typedef vector<vector<long double> > vvld; typedef vector<vvi> vvvi; typedef vector<vector<char> > vvc; typedef vector<vs> vvs; typedef vector<D> vD; typedef set<pair<ll, ll> > spll; typedef pair<ull, ull> pull; typedef vector<pull> vpull; typedef vector<bool> vb; typedef vector<vb> vvb; typedef set<char> sc; typedef queue<int> qi; typedef queue<ll> qll; typedef queue<bool> qb; typedef vector<sll> vsll; typedef queue<pair<ll, ll> > qpll; typedef vector<vector<pair<int, int> > > vvpii; typedef vector<vector<pair<ll, ll> > > vvpll; typedef vector<spll> vspll; typedef multiset<char> msc; typedef queue<str> qs; typedef vector<set<int> > vsi; typedef priority_queue<ll> pqll; typedef vector<vsll> vvsll; typedef pair<ld, ld> pld; typedef vector<vvll> vvvll; typedef set<ld> sld; typedef vector<vpld> vvpld; typedef tree<ll, null_type, less<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_set; typedef tree<ll, null_type, less_equal<ll>, rb_tree_tag, tree_order_statistics_node_update> ordered_multiset; // \\\\\\\\\\**TYPEDEFS - END**\\\\\\\\\\ // */ // /* // //////////**CONSTANTS - START**////////// const ld pi = acosl(-1); const ll mod1 = 1e9 + 7; const ll mod2 = 998244353; const ll MAXLL = 9223372036854775807; //const ll MAXINT = 2147483647; const ld eps = 1e-6; // \\\\\\\\\\**CONSTANTS - END**\\\\\\\\\\ // */ // /* // //////////**TEMPLATES - START**////////// template<typename T> istream &operator>>(istream &in, vector<T> &a) { for (T &i : a) in >> i; return in; } template<typename T1, typename T2> istream &operator>>(istream &in, pair<T1, T2> &a) { in >> a.fi >> a.se; return in; } template<typename T1, typename T2> ostream &operator<<(ostream &out, pair<T1, T2> a) { out << a.fi << " " << a.se; return out; } template<typename T1, typename T2> istream &operator>>(istream &in, vector<pair<T1, T2> > &a) { for ( pair<T1, T2> &i : a) in >> i.fi >> i. se; return in; } template<typename T> ostream &operator<<(ostream &out, const vector<T> &a) { for (auto i : a) { out << i << " "; } return out; } template<typename T1, typename T2> ostream &operator<<(ostream &out, vector<pair<T1, T2> > &a) { for ( pair<T1, T2> i : a) out << i.fi << " " << i.se << endl; return out; } template<typename T1> ostream &operator<<(ostream &out, vector<vector<T1> > &a) { for (vector<T1> i : a) { for (T1 j : i) out << j << " "; out << endl; } return out; } template<typename T1, typename T2> inline T1 min(T1 a, T2 b) { b = (T1) b; return a > b ? b : a; } template<typename T1, typename T2> inline T1 max(T1 a, T2 b) { b = (T1) b; return a > b ? a : b; } template<typename T1, typename T2> inline void amin(T1 &a, T2 b) { a = min(a, b); } template<typename T1, typename T2> inline void amax(T1 &a, T2 b) { a = max(a, b); } // \\\\\\\\\\**TEMPLATES - END**\\\\\\\\\\ // */ // This bear is a good alternative to duck!!! /* ???? ?????? ??????????????????? ???????????????? ??? ??? ??????????? ??? ??? ???????????? ?? ?????????????????? ??????????????? ? ????????????????? ??????? ??? ?? ???? ?????????? ???? ?? ??? ???????????? ????? ???????????????????? ???????? ?? ??????? ??????? ????? */ ld getTime() { return (ld) clock() / (ld) CLOCKS_PER_SEC; } mt19937_64 rn(chrono::steady_clock::now().time_since_epoch().count()); //mt19937_64 rn(228); ll rnd(ll l, ll r) { ll a = rn() % (r - l + 1) + l; return a; } void solve(); ll T = 1; signed main(int argc, char **argv) { // setlocale(LC_ALL, "RUS"); fastIO() cout.precision(12); cout << fixed; if (local && argc == 1) { freopen("input.txt", "r", stdin); // freopen("wrong.txt", "w", stdout); } // cin >> T; while (T--) { solve(); } if (local && argc == 1) { cout << endl << fixed << "time = " << getTime(); } return 0; } /* ___ __ __ ______ __ _____ __ __ __ __ / | _____/ /___ ______ _/ / / ____/___ ____/ /__ / ___// /_____ ______/ /______ / / / /__ ________ / /| |/ ___/ __/ / / / __ `/ / / / / __ \/ __ / _ \ \__ \/ __/ __ `/ ___/ __/ ___/ / /_/ / _ \/ ___/ _ \ / ___ / /__/ /_/ /_/ / /_/ / / / /___/ /_/ / /_/ / __/ ___/ / /_/ /_/ / / / /_(__ ) / __ / __/ / / __/ /_/ |_\___/\__/\__,_/\__,_/_/ \____/\____/\__,_/\___/ /____/\__/\__,_/_/ \__/____/ /_/ /_/\___/_/ \___/ */ struct DSU { ll n; vll pr; vll sz; DSU(ll n) { pr.resize(n); sz.resize(n); for (int i = 0; i < n; i++) { pr[i] = i; sz[i] = 1; } } ll find_set(ll a) { if (a == pr[a]) { return a; } return pr[a] = find_set(pr[a]); } void union_sets(ll a, ll b) { a = find_set(a); b = find_set(b); if (a != b) { if (sz[a] < sz[b]) { swap(a, b); } sz[a] += sz[b]; pr[b] = a; } } }; const ll N = 3e5 + 500; ll n, m, k, a[N], ans, c[N], sm, ti; array<ll, 4> ed[N], ed1[N]; vpll g[N]; DSU d(0); spll s[N]; void merge(ll v, ll x) { if (sz(s[v]) < sz(s[x])) swap(s[v], s[x]); for (auto y : s[x]) { if (s[v].find(y) != en(s[v])) s[v].erase(y); else s[v].ins(y); } } void dfs(ll v, ll p, ll f) { c[v] = a[v]; for (auto [x, w] : g[v]) { if (x == p) con; dfs(x, v, w); merge(v, x); c[v] += c[x]; } sm += f * be(s[v])->fi * c[v]; } void solve() { cin >> n >> m >> k; for0(i, m) { cin >> ed[i][2] >> ed[i][3] >> ed[i][0], ed[i][2]--, ed[i][3]--; ed[i][1] = 1; } for0(i, k) { cin >> ed[i + m][2] >> ed[i + m][3], ed[i + m][2]--, ed[i + m][3]--; ed[i + m][1] = 0; } for0(i, n) cin >> a[i]; for0(msk, 1 << k) { if (m > 50 && popcount(msk) != 4) con; for0(i, k) { if (msk >> i & 1) ed[i + m][0] = 0; else ed[i + m][0] = 1e9; } for0(i, m + k) { ed1[i] = ed[i]; } sort(ed1, ed1 + m + k); d = DSU(n); sm = 0; for0(i, n) { g[i].clear(); s[i].clear(); } ti = 0; for0(i, m + k) { auto [w, tp, u, v] = ed1[i]; if (d.find_set(u) != d.find_set(v)) { g[u].pb({v, !tp}); g[v].pb({u, !tp}); d.union_sets(u, v); } else { s[u].ins({w, ti}); s[v].ins({w, ti}); } ti++; } dfs(0, 0, 0); amax(ans, sm); } cout << ans; }

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

toll.cpp: In function 'int main(int, char**)':
toll.cpp:291:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
  291 |         freopen("input.txt", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#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...