Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include "cstdlib"
- #include "cctype"
- #include "cstring"
- #include "cstdio"
- #include "cmath"
- #include "algorithm"
- #include "vector"
- #include "string"
- #include "iostream"
- #include "sstream"
- #include "set"
- #include "queue"
- #include "stack"
- #include "fstream"
- #include "strstream"
- using namespace std;
- #define M 2000
- int STACK[M],top=0;
- bool InStack[M];
- int DFN[M];
- int Low[M];
- int ComponetNumber=0;
- int Index=0;
- vector <int> Edge[M];
- vector <int> Component[M];
- void Tarjan(int i)
- {
- int j;
- DFN[i]=Low[i]=Index++;
- InStack[i]=true;
- STACK[++top]=i;
- for (int e=0;e<Edge[i].size();e++)
- {
- j=Edge[i][e];
- if (DFN[j]==-1)
- {
- Tarjan(j);
- Low[i]=min(Low[i],Low[j]);
- }
- else if (InStack[j])
- Low[i]=min(Low[i],DFN[j]);
- }
- if (DFN[i]==Low[i])
- {
- cout<<"TT "<<i<<" "<<Low[i]<<endl;
- ComponetNumber++;
- do
- {
- j=STACK[top--];
- InStack[j]=false;
- Component[ComponetNumber].push_back(j);
- }
- while (j!=i);
- }
- }
- void solve(int N)
- {
- memset(STACK,-1,sizeof(STACK));
- memset(InStack,0,sizeof(InStack));
- memset(DFN,-1,sizeof(DFN));
- memset(Low,-1,sizeof(Low));
- for(int i=0;i<N;i++)
- if(DFN[i]==-1)
- Tarjan(i);
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- Edge[0].push_back(4);Edge[0].push_back(13); Edge[0].push_back(17);
- Edge[1].push_back(14);
- Edge[2].push_back(6);Edge[2].push_back(28);
- Edge[3].push_back(16);
- Edge[4].push_back(10); Edge[4].push_back(17);Edge[4].push_back(36);
- Edge[5].push_back(18); Edge[5].push_back(42);
- Edge[6].push_back(7); Edge[6].push_back(20);
- Edge[7].push_back(2); Edge[7].push_back(19);Edge[7].push_back(21);
- Edge[8].push_back(0); Edge[8].push_back(13);Edge[8].push_back(21);Edge[8].push_back(34);Edge[8].push_back(47);
- Edge[9].push_back(10);Edge[9].push_back(22);
- Edge[10].push_back(23);
- Edge[11].push_back(10);Edge[11].push_back(24);
- Edge[12].push_back(25);Edge[12].push_back(38);Edge[12].push_back(51);
- Edge[13].push_back(0);Edge[13].push_back(16);
- Edge[14].push_back(27);
- Edge[15].push_back(2);Edge[15].push_back(19);
- Edge[16].push_back(3);Edge[16].push_back(31);
- Edge[17].push_back(23);Edge[17].push_back(30);Edge[17].push_back(49);
- Edge[18].push_back(5);
- Edge[19].push_back(20);Edge[19].push_back(33);
- Edge[20].push_back(8);Edge[20].push_back(15);Edge[20].push_back(32);Edge[20].push_back(34);
- Edge[21].push_back(12);Edge[21].push_back(26);Edge[21].push_back(39);
- Edge[22].push_back(5);Edge[22].push_back(9);Edge[22].push_back(23);
- Edge[23].push_back(10);Edge[23].push_back(36);
- Edge[24].push_back(23);Edge[24].push_back(37);
- Edge[25].push_back(3);Edge[25].push_back(8);Edge[25].push_back(16);
- Edge[26].push_back(30);Edge[26].push_back(39);Edge[26].push_back(43);
- Edge[27].push_back(1);Edge[27].push_back(40);
- Edge[28].push_back(32);Edge[28].push_back(54);
- Edge[29].push_back(42);
- Edge[30].push_back(10);Edge[30].push_back(36);Edge[30].push_back(43);
- Edge[31].push_back(35);Edge[31].push_back(44);
- Edge[32].push_back(33);Edge[32].push_back(46);
- Edge[33].push_back(21);Edge[33].push_back(28);Edge[33].push_back(45);Edge[33].push_back(47);
- Edge[34].push_back(12);Edge[34].push_back(39);Edge[34].push_back(52);
- Edge[35].push_back(22);Edge[35].push_back(36);Edge[35].push_back(48);
- Edge[36].push_back(23);Edge[36].push_back(49);
- Edge[37].push_back(36);Edge[37].push_back(40);Edge[37].push_back(50);
- Edge[38].push_back(8);Edge[38].push_back(16);Edge[38].push_back(29);
- Edge[39].push_back(13);Edge[39].push_back(52);
- Edge[40].push_back(27);Edge[40].push_back(53);
- Edge[41].push_back(15);Edge[41].push_back(45);
- Edge[42].push_back(29);Edge[42].push_back(39);
- Edge[43].push_back(4);Edge[43].push_back(23);Edge[43].push_back(49);
- Edge[44].push_back(31);
- Edge[45].push_back(46);Edge[45].push_back(54);
- Edge[46].push_back(34);Edge[46].push_back(41);
- Edge[47].push_back(3);Edge[47].push_back(12);Edge[47].push_back(52);
- Edge[48].push_back(35);Edge[48].push_back(49);
- Edge[49].push_back(36);
- Edge[50].push_back(11);Edge[50].push_back(49);
- Edge[51].push_back(8);Edge[51].push_back(29);Edge[51].push_back(42);
- Edge[52].push_back(26);
- Edge[53].push_back(40);Edge[53].push_back(50);
- Edge[54].push_back(41);
- int N=55;
- solve(N);
- cout<<"ComponetNumber is "<<ComponetNumber<<endl;
- for(int i=0;i<N;i++)
- cout<<Low[i]<<" ";
- cout<<endl;
- for(int i=0;i<N;i++)
- {
- for(int j=0;j<Component[i].size();j++)
- cout<<Component[i][j]+1<<" ";
- cout<<endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement