QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#713687 | #4898. 基础图论练习题 | scallionsong | 0 | 0ms | 0kb | C++14 | 6.1kb | 2024-11-05 20:17:42 | 2024-11-05 20:17:42 |
answer
bool M1;
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/hash_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
#define ll long long
#define ull unsigned long long
#define LL __int128
#define db double
#define LD long double
#define Pii pair<int,int>
#define Pll pair<ll,ll>
#define Pull pair<ull,ull>
#define Pdb pair<db,db>
#define fir first
#define sec second
#define vec vector<int>
#define pb push_back
#define qlr cerr<<"qlr\n"
#define dyh cerr<<"dyh\n"
#define pc(x) __builtin_popcount(x)
#define uni(x,y) uniform_int_distribution<int>(x,y)(rng)
#define unl(x,y) uniform_int_distribution<ll>(x,y)(rng)
#define unr(x,y) uniform_real_distribution<double>(x,y)(rng)
#define F(i,a,b) for(int i=a,i##end=b;i<=i##end;i++)
#define UF(i,a,b) for(int i=a,i##end=b;i>=i##end;i--)
#define look_memory cerr<<'\n'<<abs(&M1-&M2)/1024.0/1024<<'\n'
#define look_time cerr<<'\n'<<clock()*1.0/CLOCKS_PER_SEC<<'\n'
mt19937 rng(time(0)^(*new int));
const int INF=0x3f3f3f3f;
const int Mod=998244353;
template<typename T>
inline void inc(T &a,T b){
if(b<0) b+=Mod;
a+=b;
if(a>=Mod) a-=Mod;
}
template<typename T>
inline void dec(T &a,T b){
if(b<0) b+=Mod;
a-=b;
if(a<0) a+=Mod;
}
template<typename T>
inline void muc(T &a,T b){
a=a*b%Mod;
}
template<typename T>
inline bool chkmin(T &a,T b){
if(a<=b) return false;
a=b;
return true;
}
template<typename T>
inline bool chkmax(T &a,T b){
if(a>=b) return false;
a=b;
return true;
}
ll n,A,B,tot,ans;
ll ant[50010];
bool vis[50010];
Pll a[50010];
vector<ll> t[50010],g[100010];
gp_hash_table<ll,int> mp,id;
struct Edge{
ll u,v,w,ty;
};
Edge b[1000010];
struct Dsu{
#define N 200000
int fa[N+10];
void init(int n){
F(i,0,n) fa[i]=i;
}
int fd(int x){
return fa[x]==x?x:fa[x]=fd(fa[x]);
}
void merge(int x,int y){
x=fd(x),y=fd(y);
fa[x]=y;
}
#undef N
}dsu;
ll query1(ll x,vector<Pll> V){
vis[V[0].sec]=1;
if(V[0].fir>=x) return x;
if((int)V.size()==1) return V[0].fir;
ll t1=V[0].fir,t2=min(V[1].fir,x)/t1*t1;
F(i,1,V.size()-1) V[i].fir-=t2;
x-=t2;
V.insert(lower_bound(V.begin()+1,V.end(),V[0]),V[0]);
V.erase(V.begin());
reverse(V.begin(),V.end());
while(!V.empty()&&!V.back().fir) V.pop_back();
reverse(V.begin(),V.end());
return query1(x,V)+max(t1-x,0ll);
}
void query2(ll x,vector<ll> &V1,vector<ll> &V2){
if(V1[0]>=x||(int)V1.size()==1){
for(auto &i:V2) if(i>0) i%=V1[0];
mp.clear();
F(i,0,V2.size()-1){
if(V2[i]<0) continue;
if(mp.find(V2[i])!=mp.end()) dsu.merge(i,mp[V2[i]]);
else mp[V2[i]]=i;
}
return;
}
ll t1=V1[0],t2=min(V1[1],x)/t1*t1;
F(i,1,V1.size()-1) V1[i]-=t2;
V1.insert(lower_bound(V1.begin()+1,V1.end(),V1[0]),V1[0]);
V1.erase(V1.begin());
reverse(V1.begin(),V1.end());
while(!V1.empty()&&!V1.back()) V1.pop_back();
reverse(V1.begin(),V1.end());
x-=t2;
if(x<t1){
for(auto &i:V2) if(i>0) i=max(i-t2+t1,(i-1)%t1+1);
mp.clear();
F(i,0,V2.size()-1){
if(V2[i]<0) continue;
if(V2[i]<=x) V2[i]=V2[i];
else if(V2[i]>t1) V2[i]-=t1;
else{
if(mp.find(V2[i])!=mp.end()) dsu.merge(i,mp[V2[i]]);
else mp[V2[i]]=i;
V2[i]=-1;
}
}
}
else for(auto &i:V2) if(i>0) i=max(i-t2,(i-1)%t1+1);
bool fl=0;
for(auto i:V2) if(i>0) fl=1;
if(fl) query2(x,V1,V2);
}
void solve(int L,int R,vector<ll> V){
if((int)V.size()<=1) return;
while(L<R&&ant[R]==ant[R-1]) R--;
if(L==R){
if(L!=A+1) F(i,1,V.size()-1) b[++B]={V[i-1],V[i],a[L].sec,2};
return;
}
int mid=(L+R)>>1;
dsu.init(V.size()-1);
vector<ll> f,V1,V2;
V1=t[mid],V2=V;
query2(n,V1,V2);
V1.clear(),V2.clear();
F(i,0,V.size()-1) f.pb(dsu.fd(i));
F(i,0,V.size()-1) V1.pb(i);
sort(V1.begin(),V1.end(),[&](ll cm1,ll cm2){return f[cm1]<f[cm2];});
for(int i=0,j=0;i<(int)V1.size();i=j+1){
j=i;
while(j<(int)V1.size()-1&&f[V1[j+1]]==f[V1[i]]) j++;
V2.clear();
F(k,i,j) V2.pb(V[V1[k]]);
solve(L,mid,V2);
}
V2.clear();
F(i,0,V.size()-1) if(f[i]==i) V2.pb(V[i]);
solve(mid+1,R,V2);
}
bool M2;
int main(){
freopen("mst.in","r",stdin);
freopen("mst.out","w",stdout);
srand(time(0)^(*new int));
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>A>>B;
F(i,1,A) cin>>a[i].fir>>a[i].sec;
F(i,1,B) cin>>b[i].u>>b[i].v>>b[i].w;
F(i,1,B) b[i].u++,b[i].v++,b[i].ty=1;
sort(a+1,a+A+1,[&](Pll cm1,Pll cm2){return cm1.sec<cm2.sec;});
vector<Pll> V,tV;
F(i,1,A){
V.pb({a[i].fir,0});
sort(V.begin(),V.end());
F(j,0,V.size()-1) V[j].sec=j;
F(j,0,V.size()-1) vis[j]=0;
ant[i]=(n-query1(n,V))%Mod;
tV.clear();
F(j,0,V.size()-1) if(vis[j]) tV.pb(V[j]);
V=tV;
for(auto j:V) t[i].pb(j.fir);
}
F(i,1,A) ans=(ans+(ant[i]-ant[i-1])*a[i].sec)%Mod;
vector<ll> rf;
F(i,1,B) rf.pb(b[i].u),rf.pb(b[i].v);
sort(rf.begin(),rf.end());
rf.erase(unique(rf.begin(),rf.end()),rf.end());
F(i,0,rf.size()-1) id[rf[i]]=i;
// dsu.init(1);
// query2(n,{8,11},{15,17});
// F(i,0,1) cout<<dsu.fd(i)<<' ';
solve(1,A+1,rf);
sort(b+1,b+B+1,[&](Edge cm1,Edge cm2){return cm1.w<cm2.w;});
dsu.init(rf.size()-1);
F(i,1,B){
if(b[i].ty==1) continue;
ll u=id[b[i].u],v=id[b[i].v],w=b[i].w;
if(dsu.fd(u)==dsu.fd(v)) continue;
dsu.merge(u,v);
dec(ans,w);
}
dsu.init(rf.size()-1);
F(i,1,B){
ll u=id[b[i].u],v=id[b[i].v],w=b[i].w;
if(dsu.fd(u)==dsu.fd(v)) continue;
dsu.merge(u,v);
inc(ans,w);
}
ans=(ans%Mod+Mod)%Mod;
cout<<ans;
look_memory;
look_time;
return 0;
}
/*
g++ D2.cpp -o D2 -std=c++14 -O2&&./D2
20 3 2
11 2
8 0
19 0
14 0 3
12 16 1
*/
详细
Subtask #1:
score: 0
Dangerous Syscalls
Test #1:
score: 0
Dangerous Syscalls
input:
161199 9 46510 147335 540442844 159493 801351455 149342 821625305 128476 843250712 95524 275754315 139315 106523502 93575 680460786 155498 328812257 146020 410466645 79992 141967 50596784 152210 68644 268349216 72549 96959 42994091 93869 27394 945120577 2909 81886 270684270 12735 35026 871917997 974...
output:
result:
Subtask #2:
score: 0
Skipped
Dependency #1:
0%
Subtask #3:
score: 0
Dangerous Syscalls
Test #11:
score: 0
Dangerous Syscalls
input:
569435269457904707 2 0 490445920091092693 772271583 144842828305643603 609043885
output:
result:
Subtask #4:
score: 0
Skipped
Dependency #3:
0%
Subtask #5:
score: 0
Dangerous Syscalls
Test #31:
score: 0
Dangerous Syscalls
input:
755526150476311190 942 0 492334667739348527 1 755523898623296976 1 532486636690994793 1 755526150476030559 1 755526150476249097 1 502164090270592200 1 657422656495814703 1 487200614853438190 1 311037325561173142 1 755526150475651155 1 125287404340238660 1 755524914808674090 1 755526150476177007 1 75...
output:
result:
Subtask #6:
score: 0
Skipped
Dependency #3:
0%
Subtask #7:
score: 0
Skipped
Dependency #3:
0%
Subtask #8:
score: 0
Skipped
Dependency #5:
0%
Subtask #9:
score: 0
Skipped
Dependency #1:
0%