QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#327876 | #1844. Cactus | fangzichang | WA | 403ms | 153708kb | C++17 | 2.8kb | 2024-02-15 15:12:28 | 2024-02-15 15:12:29 |
Judging History
answer
#include<bits/extc++.h>
#include<bits/stdc++.h>
//#pragma GCC optimize(2)
//本代码含有小众情感元素,建议满 18 周岁后观看
#ifdef __unix__
#define getchar getchar_unlocked
#define putchar putchar_unlocked
#else
#define getchar _getchar_nolock
#define putchar _putchar_nolock
#endif
#define debug fprintf(stderr,"Tomoyo after ~It's a wonderful life!~\n")
#define all(x) x.begin(),x.end()
#define pii pair<int,int>
#define Inf (int)INFINITY
#define inf 0x3f3f3f3f
#define pb push_back
#define ll long long
#define endl '\n'
#define y second
#define x first
using namespace std;
const int N=6e5+10;
void read(){};
template<class T1,class ...T2>
inline void read(T1& ret,T2&... rest){
ret=0;char c=getchar();bool f=false;
while(c<'0'||c>'9')f=c=='-',c=getchar();
while(c>='0'&&c<='9')ret=ret*10+c-'0',c=getchar();
f&&(ret=-ret),read(rest...);
}
#define cin(...) read(__VA_ARGS__)
template<class T>
inline void print(T x){
static int s[35],t=0;
bool f=x<0;if(f)x=-x;
do s[t++]=x%10,x/=10;while(x);
f&&putchar('-');while(t)putchar(s[--t]+'0');
}
set<int>nxt[N],g[N];
vector<pii>ans;
vector<int>stk,rt,t[N];
int n,m,flg,tot,cnt,dfn[N],low[N],r[N];
void op(int u){
if(!(g[u].size()&1)){
cout<<u<<endl;
for(int v:g[u])cout<<v<<" ";
cout<<endl;
}
for(int v:g[u])g[v].erase(u);
g[u].clear();
ans.pb({1,u});
}
void work(int u){
if(!(nxt[u].size()&1))return;
vector<int>tmp;
for(int v:nxt[u])tmp.pb(v),nxt[v].erase(u);
op(u),nxt[u].clear();
for(int v:tmp)work(v);
}
void Tarjan(int u,int fa){
low[u]=dfn[u]=++tot,stk.pb(u);
for(int v:nxt[u])if(v^fa){
if(!dfn[v]){
Tarjan(v,u),low[u]=min(low[u],low[v]);
if(low[v]>=dfn[u]){
t[++cnt].pb(u),t[u].pb(cnt);
while(stk.back()!=u)
t[cnt].pb(stk.back()),t[stk.back()].pb(cnt),stk.pop_back();
}
}
else low[u]=min(low[u],dfn[v]);
}
}
void dfs(int u,int fa){
for(int v:t[u])if(v^fa)dfs(v,u);
if(u>n){
//assert(t[u][0]==fa);
for(int i=1;i<(int)(t[u].size());i++)op(t[u][i]+(i&1)*n);
op(t[u][1]),op(t[u].back()+(t[u].size()&1)*n);
}
}
int main(){
cin(n,m),cnt=n;
for(int i=1,u,v;i<=m;i++)
cin(u,v),nxt[u].insert(v),nxt[v].insert(u),g[u].insert(v),g[v].insert(u);
for(int u=1;u<=n;u++)work(u);
for(int u=1;u<=n;u++)if(nxt[u].size())flg=1;
if(!flg){
print(0),putchar(' '),print(ans.size()),putchar(endl);
for(pii p:ans)print(p.x),putchar(' '),print(p.y),putchar(endl);
return 0;
}
ans.pb({2,0});
for(int i=1;i<=n;i++){
for(int j:g[i])g[i+n].insert(j+n);
g[i+n].insert(i),g[i].insert(i+n);
}
for(int u=1;u<=n;u++){
if(!nxt[u].size())op(u);
else if(!dfn[u])rt.pb(u),r[u]=1,Tarjan(u,0);
}
for(int u:rt)dfs(u,0),op(u);
print(0),putchar(' '),print(ans.size()),putchar(endl);
for(pii p:ans){
print(p.x);if(p.y)putchar(' '),print(p.y);
putchar(endl);
}
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 12ms
memory: 77872kb
input:
3 3 1 2 1 3 2 3
output:
0 6 2 1 6 1 2 1 3 1 5 1 1
result:
ok You are right!
Test #2:
score: 0
Accepted
time: 9ms
memory: 74188kb
input:
7 7 1 2 1 3 2 3 2 4 2 5 3 6 3 7
output:
0 5 1 4 1 2 1 1 1 6 1 3
result:
ok You are right!
Test #3:
score: -100
Wrong Answer
time: 403ms
memory: 153708kb
input:
300000 368742 1 143504 1 234282 2 91276 2 296320 3 274816 4 212293 4 258214 5 253489 5 295826 6 96521 6 252745 6 267103 6 269879 7 5293 7 295586 8 44304 8 57067 8 233291 9 190526 10 18682 11 7440 12 24695 12 172561 12 243692 12 280316 13 80152 13 268749 14 146394 14 207280 15 151280 15 226848 16 458...
output:
153816 97003 190282 97003 389549 89549 457385 508645 549193 580696 207888 195533 281274 195533 435033 135033 471679 135033 171679 245041 135033 471679 470101 487627 555387 255387 565819 435621 300785 384420 384420 84420 300785 84420 785 143987 84420 171658 173470 166787 200129 294962...
result:
wrong answer Integer parameter [name=m'] equals to 153816, violates the range [0, 0]