Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- #define mx 10005
- #define pii pair<int,int>
- int ans,vis[mx],low[mx],d[mx],par[mx],pkkkkk,arr[mx];vector<int>v[mx];set<pii>st;
- set<pii>::iterator it;
- void dfs(int s)
- {
- pkkkkk=pkkkkk+1;
- d[s]=low[s]=pkkkkk;
- vis[s]=1;
- for(int i=0;i<v[s].size();i++)
- {
- int u=v[s][i];
- if(u==par[s])continue;
- if(vis[u]==1)
- {
- low[s]=min(low[s],d[u]);
- }
- else
- {
- par[u]=s;
- dfs(u);
- low[s]=min(low[u],low[s]);
- if(low[u]>d[s])
- {
- st.insert(pii(min(s,u),max(s,u)));
- }
- }
- }
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- for(int q=0;q<t;q++)
- {
- int n,m;pkkkkk=0;
- scanf("%d",&n);
- ans=0;st.clear();
- for(int i=0;i<=n;i++)
- {
- vis[i]=0;
- v[i].clear();
- }
- for(int i=0;i<n;i++)
- {
- int nodeno,son,a;
- scanf("%d (%d)",&nodeno,&son);
- for(int j=0;j<son;j++)
- {
- scanf("%d",&a);
- v[nodeno].push_back(a);
- }
- }
- for(int i=0;i<=n;i++)
- {
- if(!vis[i])dfs(i);
- }
- printf("Case %d:\n",q+1);
- printf("%d critical links\n",st.size());
- for(it=st.begin();it!=st.end();it++)
- {
- printf("%d - %d\n",it->first,it->second);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement