QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#484483 | #906. 强连通分量 | rzh123 | WA | 1ms | 5652kb | C++20 | 972b | 2024-07-19 19:35:13 | 2024-07-19 19:35:17 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
constexpr int N=5e5+5;
int n,m,ec,eh[N],dft,dfn[N],low[N];
struct{int nxt,to;}e[N<<1];
vector<vector<int> > scc;
inline void adde(int u,int v){
e[++ec]={eh[u],v},eh[u]=ec;
}
void tarj(int u){
static stack<int> stk;
static bool ins[N];
dfn[u]=low[u]=++dft,stk.emplace(u),ins[u]=true;
for(int i{eh[u]};i;i=e[i].nxt){
int v{e[i].to};
if(!dfn[v]) tarj(v),low[u]=min(low[u],low[v]);
else if(ins[v]) low[u]=min(low[u],dfn[v]);
}
if(low[u]==dfn[u]){
scc.emplace_back();
while(1){
int t{stk.top()}; stk.pop(),ins[t]=false;
scc.back().emplace_back(t);
if(t==u) break;
}
}
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cin>>n>>m;
for(int i{1};i<=m;++i){
int u,v; cin>>u>>v;
adde(u,v);
}
for(int i{0};i<n;++i) if(!dfn[i]) tarj(i);
cout<<scc.size()<<'\n';
for(const auto &a:scc){
cout<<a.size();
for(int i:a) cout<<' '<<i;
cout<<'\n';
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 1ms
memory: 5652kb
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)