社区讨论
RE#4~13,求调
P14978[USACO26JAN1] Mooclear Reactor S参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mm1uiwwe
- 此快照首次捕获于
- 2026/02/25 17:42 2 周前
- 此快照最后确认于
- 2026/02/26 23:55 2 周前
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e6+2;
int T,n,m,l[N],r[N],k[N],x[N],b[N],xx,yy,zz;
vector<int>g[N],lsh;
int cf[N],ll[N],rr[N];
int clac(int mf){
for(int i=0;i<g[mf].size();++i){
ll[i]=(l[g[mf][i]]-b[g[mf][i]])*k[g[mf][i]],rr[i]=(r[g[mf][i]]-b[g[mf][i]])*k[g[mf][i]];
if(ll[i]>rr[i]) swap(ll[i],rr[i]);
lsh.push_back(ll[i]),lsh.push_back(rr[i]),lsh.push_back(rr[i]+1);
}
sort(lsh.begin(),lsh.end());
lsh.erase(unique(lsh.begin(),lsh.end()),lsh.end());
for(int i=0;i<g[mf].size();++i){
++cf[lower_bound(lsh.begin(),lsh.end(),ll[i])-lsh.begin()+1];
--cf[lower_bound(lsh.begin(),lsh.end(),rr[i])-lsh.begin()+2];
}
int res=0;
for(int i=1;i<=lsh.size();++i){
cf[i]+=cf[i-1];
res=max(res,cf[i]);
}
memset(cf,0,sizeof(cf));
vector<int>().swap(g[mf]);
vector<int>().swap(lsh);
return res;
}
int solve(){
int ans=0;
for(int i=0;i<=n;++i) k[i]=1,x[i]=i,b[i]=0,g[i].push_back(i),g[0].push_back(-i);
for(int i=1;i<=m;++i){
cin>>xx>>yy>>zz;
if(x[xx]==x[yy]){
if(!x[xx]){
if(b[xx]+b[yy]!=zz) return -1;
continue;
}
if(k[xx]==k[yy]){
int bb=zz-b[xx]-b[yy];
if(bb&1) return -1;
bb=bb/2*k[xx];
int mfmf=x[xx];
for(int jj:g[mfmf]) b[jj]=k[jj]*bb+b[jj],x[jj]=0;
vector<int>().swap(g[mfmf]);
continue;
}
if(b[xx]+b[yy]!=zz) return -1;
continue;
}
if(g[x[xx]].size()>g[x[yy]].size()) swap(xx,yy);
int nx=x[xx],nk=-k[xx]*k[yy],bb=(zz-b[xx]-b[yy])*k[xx];
for(int jj:g[nx]) b[jj]=k[jj]*bb+b[jj],k[jj]*=nk,x[jj]=x[yy],g[x[yy]].push_back(jj);
vector<int>().swap(g[nx]);
}
for(int i=1;i<=n;++i){
if(!x[i]) ans+=(b[i]>=l[i]&&b[i]<=r[i]);
if(g[i].size()) ans+=clac(i);
}
return ans;
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>T;
for(int MF=1;MF<=T;++MF){
cin>>n>>m;
for(int i=1;i<=n;++i) cin>>l[i];
for(int i=1;i<=n;++i) cin>>r[i];
cout<<solve()<<'\n';
for(int i=0;i<=n;++i) vector<int>().swap(g[i]);
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...