QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#340747 | #906. 强连通分量 | ffffyc# | WA | 3ms | 15340kb | C++14 | 1.8kb | 2024-02-29 11:43:00 | 2024-02-29 11:43:03 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
#define ll long long
namespace IO{//by cyffff
int len=0;
char ibuf[(1<<21)+1],*iS,*iT,out[(1<<25)+1];
#if ONLINE_JUDGE
#define gh() (iS==iT?iT=(iS=ibuf)+fread(ibuf,1,(1<<21)+1,stdin),(iS==iT?EOF:*iS++):*iS++)
#else
#define gh() getchar()
#endif
#define reg register
inline int read(){
reg char ch=gh();
reg int x=0;
reg char t=0;
while(ch<'0'||ch>'9') t|=ch=='-',ch=gh();
while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=gh();
return t?-x:x;
}
inline void putc(char ch){
out[len++]=ch;
}
template<class T>
inline void write(T x){
if(x<0)putc('-'),x=-x;
if(x>9)write(x/10);
out[len++]=x%10+48;
}
inline void flush(){
fwrite(out,1,len,stdout);
len=0;
}
inline char getc(){
char ch=gh();
while(ch<'A'||ch>'Z') ch=gh();
return ch;
}
}
using IO::read;
using IO::write;
using IO::flush;
using IO::getc;
using IO::putc;
const int N=5e5+10;
int n,m,head[N],cnt;
struct Edge{
int to,nxt;
}a[N<<1];
inline void add(int u,int v){
a[++cnt]={v,head[u]},head[u]=cnt;
}
int dfn[N],low[N],tim,stk[N],top,blk;
bool vis[N];
vector<int>poi[N];
inline void Tarjan(int x){
low[x]=dfn[x]=++tim;
stk[++top]=x,vis[x]=1;
int sc=0;
for(int i=head[x];i;i=a[i].nxt){
int t=a[i].to;
if(!dfn[t]){
Tarjan(t);
low[x]=min(low[x],low[t]);
}else if(vis[t]) low[x]=min(low[x],dfn[t]);
}
if(dfn[x]==low[x]){
blk++;
while(1){
int p=stk[top--];
vis[p]=0;
poi[blk].push_back(p);
if(p==x) break;
}
}
}
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++){
int u=read()+1,v=read()+1;
add(u,v);
}
for(int i=1;i<=n;i++)
if(!dfn[i])
Tarjan(i);
write(blk),putc('\n');
for(int i=1;i<=blk;i++){
write(poi[i].size()),putc(' ');
for(auto tmp:poi[i]) write(tmp-1),putc(' ');
putc('\n');
}
flush();
}
详细
Test #1:
score: 0
Wrong Answer
time: 3ms
memory: 15340kb
input:
6 7 1 4 5 2 3 0 5 5 4 1 0 3 4 2
output:
4 2 3 0 1 2 2 4 1 1 5
result:
wrong answer 5 is later than 2, but there is an edge (5, 2)