QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#261677 | #5504. Flower Garden | six-floor-slip-liu | WA | 0ms | 54696kb | C++14 | 4.4kb | 2023-11-23 08:29:21 | 2023-11-23 08:29:22 |
Judging History
answer
#include<bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof(a))
#define forup(i,s,e) for(int i=(s);i<=(e);i++)
#define fordown(i,s,e) for(int i=(s);i>=(e);i--)
using namespace std;
using pii=pair<int,int>;
#define fi first
#define se second
#define mkp make_pair
#define gc getchar()
inline int read(){
int x=0,f=1;char c;
while(!isdigit(c=gc)) if(c=='-') f=-1;
while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=gc;}
return x*f;
}
#undef gc
const int N=1000005,inf=0x3f3f3f3f;
int n,q,cntn;
struct edge{
int v,nxt;
}e[12000000];
int head[N*11*2],cnte;
void adde(int u,int v){
e[++cnte]=edge{v,head[u]};head[u]=cnte;
}
int dfn[N*11*2],low[N*11*2],Tm,blg[N*11*2],csc,ist[N*11*2];
stack<int> stk;
int col[N*11*2],sz[N*11*2];
vector<pii> sve;
void Tarjan(int x){
low[x]=dfn[x]=++Tm;
stk.push(x);ist[x]=1;
for(int i=head[x];i;i=e[i].nxt){
int v=e[i].v;
if(!dfn[v]){
Tarjan(v);
low[x]=min(low[x],low[v]);
}else if(ist[v]){
low[x]=min(low[x],dfn[v]);
}
}
if(dfn[x]==low[x]){
++csc;sz[csc]=col[csc]=0;
while(stk.top()!=x){
ist[stk.top()]=0;
blg[stk.top()]=csc;
if(stk.top()<=n*3){
++sz[csc];
}
for(int i=head[stk.top()];i;i=e[i].nxt){
int v=e[i].v;
sve.push_back(mkp(stk.top(),v));
}
stk.pop();
}
ist[stk.top()]=0;
blg[stk.top()]=csc;
if(stk.top()<=n*3){
++sz[csc];
}
for(int i=head[stk.top()];i;i=e[i].nxt){
int v=e[i].v;
sve.push_back(mkp(stk.top(),v));
}
stk.pop();
}
}
int newnode(){
++cntn;
head[cntn]=0;
dfn[cntn]=low[cntn]=blg[cntn]=ist[cntn]=0;
return cntn;
}
struct SegTree{
#define mid ((l+r)>>1)
#define lson l,mid,id<<1
#define rson mid+1,r,id<<1|1
int num[N<<2],co,tp;
void New(int id){
num[id]=newnode();
if(tp==0){
adde(num[id>>1],num[id]);
}else{
adde(num[id],num[id>>1]);
}
}
void Build(int l=1,int r=3*n,int id=1){
if(l==r){
num[id]=l+co*(n*3);
if(tp==0){
adde(num[id>>1],num[id]);
}else{
adde(num[id],num[id>>1]);
}
return;
}
if(id>1) New(id);
#ifdef DEBUG
printf("%d %d %d||\n",l,r,num[id]);
#endif
Build(lson);Build(rson);
}
void init(int _co,int _tp){
co=_co;tp=_tp;
num[1]=newnode();
Build();
}
void Link(int L,int R,int X,int l=1,int r=3*n,int id=1){
if(L<=l&&r<=R){
if(tp==0){
adde(X,num[id]);
}else{
adde(num[id],X);
}
return;
}
if(L<=mid) Link(L,R,X,lson);
if(mid< R) Link(L,R,X,rson);
}
};
SegTree t[2][2];
namespace ANS{
vector<int> e[N];
int deg[N];
vector<int> seq;
int ans[N];
void work(){
for(auto i:sve){
int u=i.fi,v=i.se;
int fu=blg[u],fv=blg[v];
if(fu==fv) continue;
#ifdef DEBUG
printf("%d %d\n",fu,fv);
#endif
e[fu].push_back(fv);
++deg[fv];
}
vector<int> vec,v1;
forup(i,1,csc){
if(deg[i]==0){
vec.push_back(i);
}
}
while(vec.size()){
v1.clear();
for(auto u:vec){
// printf("%d\n",u);
if(sz[u]!=0) seq.push_back(u);
for(auto v:e[u]){
--deg[v];
if(deg[v]==0) v1.push_back(v);
}
}
vec=v1;
sort(vec.begin(),vec.end(),[&](int a,int b){
return sz[a]<sz[b];
});
}
int sum=0;
#ifdef DEBUG
forup(i,1,cntn){
printf("%d|",blg[i]);
}
puts("");
#endif
for(auto i:seq){
#ifdef DEBUG
printf("%d|",i);
#endif
sum+=sz[i];
col[i]=1;
if(sum>=n){
break;
}
}
#ifdef DEBUG
puts("");
#endif
if(sum<=n*2){
puts("TAK");
}else{
puts("NIE");
return;
}
forup(i,1,n*3){
ans[i]=col[blg[i]];
}
forup(i,1,n*3){
putchar(ans[i]==0?'F':'R');
}
puts("");
}
}
void solve(){
n=read();q=read();
cnte=0;cntn=n*6;
forup(i,1,n*6){
head[i]=0;
dfn[i]=low[i]=blg[i]=ist[i]=0;
}
forup(i,0,1){
forup(j,0,1){
t[i][j].init(i,j);
}
}
#ifdef DEBUG
printf("%d||\n",cntn);
#endif
forup(i,1,q){
int l1=read(),r1=read(),l2=read(),r2=read();
int nw=newnode();
t[1][1].Link(l1,r1,nw);t[1][0].Link(l2,r2,nw);
nw=newnode();
t[0][1].Link(l2,r2,nw);t[0][0].Link(l1,r1,nw);
}
sve.clear();
forup(i,1,cntn){
if(!dfn[i]) Tarjan(i);
}
forup(i,1,csc){
if(sz[i]>n*2){
puts("NIE");
return;
}
}
ANS::work();
}
signed main(){
int t=read();
while(t--){
solve();
}
}
/*
2
1 3
1 1 2 2
1 2 3 3
1 1 3 3
1 3
1 1 2 2
2 2 3 3
3 3 1 1
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 54696kb
input:
2 1 3 1 1 2 2 1 2 3 3 1 1 3 3 1 3 1 1 2 2 2 2 3 3 3 3 1 1
output:
TAK FFR NIE
result:
wrong answer odpowiedz nie spelnia wymogow!