Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///:-)
- #include <bits/stdc++.h>
- #define pb push_back
- #define ll long long int
- #define inf 2000000000
- #define infLL 9000000000000000000
- #define infULL 18446744073709551615
- #define Aktaruzzaman using
- #define pi (2.0*acos(0.0))
- #define Pramanik namespace std;
- #define vsort(v) sort(v.begin(),v.end())
- #define ull unsigned long long int
- #define mem(a, b) memset(a, b, sizeof a)
- #define cf 100009
- #define MOD 1000000007
- #define pii pair<int, int>
- //int dx[]={0,1,0,-1};
- //int dy[]={1,0,-1,0};
- //int dx[]={1,1,0,-1,-1,-1,0,1};
- //int dy[]={0,1,1,1,0,-1,-1,-1};
- template <class T> inline T gcd(T a,T b){if(b==0)return a;return gcd(b,a%b);}
- template< class T > inline T lcm(T a,T b) {a=abs(a);b=abs(b); return (a/gcd(a,b))*b;}
- template <class T> inline T is_prime(T a){if(a<2|a==4)return false;if(a==2||a==3||a==5)return true; T g=(T)sqrt(a)+1; for(T i=2; i<=g; i++){if(a%i==0)return false;}return false;}
- template <class T> inline T bigmod(T n,T p,T m){if(p==0)return 1; if(p%2)return ((n%m)*bigmod(n,p-1,m))%m; else {T c=bigmod(n,p/2,m);return ((c%m)*(c%m))%m;}}
- Aktaruzzaman Pramanik
- vector<int>a[1000], ans;
- int disc[1001], low[1001], vis[1001], par[1001];
- int discTime;
- void dfs(int x){
- ++discTime;
- disc[x]=discTime;
- low[x]=discTime;
- int children=0;
- vis[x]++;
- for(int i=0; i<a[x].size(); i++){
- int y = a[x][i];
- if(vis[y]==-1){
- children++;
- par[y]=x;
- dfs(y);
- low[x]=min(low[x], low[y]);
- if(children>1 && par[x]==-1){
- ans.pb(x);
- }
- if(par[x]!=-1 && low[y]>=disc[x])ans.pb(x);
- }
- else if(y!=par[x]){
- low[x]=min(low[x], disc[y]);
- }
- }
- }
- int main()
- {
- //freopen("input.txt","r",stdin)
- //freopen("output.txt","w",stdout)
- int n, m, i, j, k, x, y;
- scanf("%d%d", &n, &m);
- for(i=1; i<=m; i++){
- scanf("%d%d", &x, &y);
- a[x].pb(y);
- a[y].pb(x);
- }
- for(i=1; i<=n; i++){
- par[i]=-1;
- vis[i]=-1;
- disc[i]=0;
- low[i]=0;
- }
- discTime=0;
- for(i=1; i<=n; i++){
- if(vis[i]==-1)dfs(i);
- }
- printf("Articulation points are:\n");
- for(i=0; i<ans.size(); i++)printf("%d ",ans[i]);
- printf("\n");
- ans.clear();
- for(i=1; i<=n; i++)a[i].clear();
- cout<<"OK"<<endl;
- return main();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement