QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#669402 | #4420. Range Reachability Query | ChenJiarun12345 | AC ✓ | 4768ms | 91284kb | C++14 | 1.7kb | 2024-10-23 18:30:19 | 2024-10-23 18:30:19 |
Judging History
answer
/*
*/
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define inf 0x3f3f3f3f3f3f3f3fll
#define For(i,l,r) for(register int i=(l);i<=(r);i++)
#define Rof(i,l,r) for(register int i=(l);i>=(r);i--)
#define bug cout<<"Ln:"<<__LINE__<<'\n'
bool M_S;
const int N=50005;
const int M=100005;
const int B=4005;
int n,m,deg[N];
bitset<B> f[N],g[M];
vector<pair<int,int>> e[N];
struct node{int s,t,l,r;}a[B];
vector<int> vec[M];
queue<int> que;
void MAIN1(int q){
For(i,1,m+1) vec[i].clear();
For(i,1,q){
cin>>a[i].s>>a[i].t>>a[i].l>>a[i].r;
vec[a[i].l].push_back(i),vec[a[i].r+1].push_back(i);
}
For(i,1,n) f[i].reset();
For(i,1,q) f[a[i].s].flip(i);
For(i,1,m){g[i]=g[i-1];for(int j:vec[i]) g[i].flip(j);}
For(u,1,n) for(pair<int,int> to:e[u]) deg[to.first]++;
For(i,1,n) if(!deg[i]) que.push(i);
while(!que.empty()){
int u=que.front();que.pop();
for(pair<int,int> to:e[u]){
int v=to.first,w=to.second;
f[v]|=f[u]&g[w];
deg[v]--;if(!deg[v]) que.push(v);
}
}
For(i,1,q){
if(f[a[i].t][i]) cout<<"YES\n";
else cout<<"NO\n";
}
}
int q;
void MAIN(int TEST){
cin>>n>>m>>q;
For(i,1,m){int u,v;cin>>u>>v;e[u].push_back(pair<int,int>{v,i});}
int len=4000;
for(int l=1;l<=q;l+=len) MAIN1(min(l+len-1,q)-l+1);
For(i,1,n) e[i].clear();
}
bool M_T;
signed main(){
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
double T_S=clock();
// cerr<<"Memory: "<<1.0*(&M_S-&M_T)/1048576<<"MiB\n";
int test=1;
cin>>test;
For(TEST,1,test) MAIN(TEST);
double T_T=clock();
// cerr<<"Time: "<<1.0*(T_T-T_S)/CLOCKS_PER_SEC<<"ms\n";
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 4768ms
memory: 91284kb
input:
10 50000 100000 50000 42489 42490 40572 40573 33841 33842 18146 37295 31294 31295 9813 45992 25570 38939 24581 24582 13580 38328 35265 35266 11229 11230 28548 28549 25253 45063 9721 9722 31522 35509 4701 18080 8261 11199 35982 35983 26823 26824 44922 44923 19236 44157 41597 41598 22648 22649 39838 3...
output:
NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO YES NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO NO...
result:
ok 500000 lines