Submission #864058

#TimeUsernameProblemLanguageResultExecution timeMemory
864058manizareArranging Tickets (JOI17_arranging_tickets)C++14
100 / 100
87 ms28952 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3,unroll-loops") #define pb push_back #define F first #define S second #define all(a) a.begin(),a.end() #define pii pair <int,int> #define Pii pair< pii , pii > #define int long long using namespace std ; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int maxn = 6e5 + 10 , sq = 3 , maxq = 1e7 + 1 , inf = 1e18 + 10 , mod= 998244353 ,lg = 20 ; vector <pair <pii , int> > ed ; vector <int> vec[maxn] ; int pr[maxn] , n , m ; int ch(int val){ for(int i = 0 ; i < n ; i++){ pr[i] = 0 ; } for(int i =0 ; i < ed.size() ; i++){ pr[ed[i].F.F]+= ed[i].S ; pr[ed[i].F.S]-= ed[i].S ; } priority_queue <pair <int ,pii> > pq ; int w = 0 , ans = 0 ; for(int i = 0 ; i < n ; i++){ if(i)pr[i] += pr[i-1] ; for(int j = 0 ; j < vec[i].size() ; j++){ pq.push({ed[vec[i][j]].F.S , {vec[i][j] , ed[vec[i][j]].S}}); } while(pr[i] > val){ int v = pq.top().S.F , ted = pq.top().S.S; ; pq.pop() ; if(ed[v].F.S < i)continue ; if(pr[i]-2*ted > val){ pr[i]-=2*ted; pr[ed[v].F.S]+= 2*ted ; ans += ted; }else{ int gp = (pr[i] - val + 1)/2 ; pr[i] -= 2*gp ; pr[ed[v].F.S]+= 2*gp ; ans += gp ; pq.push({ed[v].F.S , {v , ted-gp}}) ; } } } return ans ; } signed main() { ios::sync_with_stdio(0) ; cin.tie(0) ; cout.tie(0) ; cin >> n >> m ; for(int i =1 ; i <= m ; i++){ int a , b , c; cin >> a >> b >> c ; if(a > b)swap(a , b) ; a--; b--; pr[a]+=c; pr[b]-=c; ed.pb({{a, b} , c}) ; } for(int i = 1; i< n ;i++){ pr[i]+= pr[i-1] ; } int mx= 0 ; for(int i = 0 ; i < n ; i++){ if(pr[i] > pr[mx])mx = i ; } for(int i =0 ; i < ed.size() ; i++){ ed[i].F.F = (ed[i].F.F - mx - 1+ n)%n ; ed[i].F.S = (ed[i].F.S - mx - 1 + n)%n ; if(ed[i].F.F > ed[i].F.S)swap(ed[i].F.F , ed[i].F.S); vec[ed[i].F.F].pb(i) ; } cout << min(ch(0) , ch(1)+1) << "\n" ; } /* */
#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...