Pagini recente » Cod sursa (job #838561) | Cod sursa (job #2581229) | Cod sursa (job #698786) | Cod sursa (job #1515516) | Cod sursa (job #1134273)
#include <iostream>
#include <vector>
#include <fstream>
//g prin mat de ad si nodul i
//det ctc careia ii apartine i
using namespace std;
ifstream in("gigi.in");
const int N=5+1e5;
vector<int> g[N],s;
int ind[N],low[N],n;
bool ins[N];
int index,lo;
#define min(a,b) a<b?a:b
void ctc(int x){
s.push_back(x);
ins[x]=true;
ind[x]=low[x]=++index;
for(int i=0 ; i<g[x].size() ; i++){
if(!ind[g[x][i]]){
ctc(g[x][i]);
low[x]=min(low[x],low[g[x][i]]);
}else if(ins[g[x][i]]){
low[x]=min(low[x],ind[g[x][i]]);
}
}
if(low[x]==ind[x]){
int w;
do{
w=s.back();
cout<<w<<" ";
s.pop_back();
}while(w!=x);
cout<<"\n";
}
}
int main() {
int a;
in>>n;
for(int i=1 ; i<=n ; i++){
for(int j=1 ; j<=n ; j++){
in>>a;
if(a) g[i].push_back(j);
}
}
cin>>a;
ctc(a);
return 0;
}