#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=(int)2e5;
LL f[N+2]={};
vector<pair<int,int>>upd[N+2];
int t,n,m;
bool judge(LL x,LL lim){
if (lim<0) return false;
vector<LL>add(n+2,0);
priority_queue<pair<int,int>,vector<pair<int,int>>,less<pair<int,int>>>pq;
LL cur_add=0;
for(int i=1;i<=t;++i){
LL need=(f[i]+x-lim+1)/2;
for(auto&xx:upd[i]) if (xx.first>t) pq.push(xx);
while (cur_add<need){
if (pq.empty()) return false;
int y=pq.top().second;
int xx=pq.top().first;
pq.pop();
if (cur_add+y<=need) cur_add+=y,add[xx]+=y;
else {
int add_more=need-cur_add;
y-=add_more;
add[xx]+=add_more,cur_add+=add_more;
pq.push({xx,y});
}
}
}
for(int i=t+1;i<=n;++i){
cur_add-=add[i];
if (f[i]+x-cur_add*2>lim) return false;
}
return true;
}
bool possible(LL m){
return judge(f[t]-m,m)||judge(f[t]-m+1,m);
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0) ; cout.tie(0);
#define task "main"
if (fopen(task".inp","r")){
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
cin>>n>>m;
LL mx=0;
for(int i=1;i<=m;++i){
int a,b,c; cin>>a>>b>>c;
if (a>b) swap(a,b);
upd[a].push_back({b,c});
f[a]+=c,f[b]-=c;
mx=max(mx,(LL)c);
}
for(int i=1;i<=n;++i) f[i]+=f[i-1];
t=0;
for(int i=1;i<=n;++i) if (f[i]>f[t]) t=i;
LL low=0,high=mx*m,ans=-1;
assert(t!=-1);
while (low<=high){
LL mid=(low+high)/2;
bool exist=possible(mid);
if (exist){
ans=mid;
high=mid-1;
}
else low=mid+1;
}
cout<<ans;
return 0;
}
컴파일 시 표준 에러 (stderr) 메시지
arranging_tickets.cpp: In function 'int main()':
arranging_tickets.cpp:49:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
49 | freopen(task".inp","r",stdin);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
arranging_tickets.cpp:50:24: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
50 | freopen(task".out","w",stdout);
| ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |