Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <queue>
- #include <cmath>
- using namespace std;
- int c[51],used[51],n,m,say=0,e=0,sum=0,syw,maxi;
- char adj[51][51];
- int dfs(int s){
- c[s]=2;
- say++;
- for(int i=1;i<=n;i++){
- if(c[i]==0 && adj[s][i]=='1'){
- dfs(i);
- }
- }
- }
- int main()
- {
- while(cin>>n){
- for(int i=1;i<=n;i++){
- for(int j=1;j<=n;j++){
- cin>>adj[i][j];
- if(adj[i][j]=='1'){
- e++;
- }
- }
- }
- e/=2;
- cin>>m;
- int uu;
- for(int i=1;i<=m;i++){
- cin>>uu;
- c[uu+1]=1;
- }
- for(int i=1;i<=n;i++){
- if(c[i]==1){
- say=0;
- dfs(i);
- maxi=max(say,maxi);
- sum+=say*(say-1)/2;
- }
- }
- for(int i=1;i<=n;i++){
- if(c[i]==0){
- syw++;
- }
- }
- if(syw!=0)
- syw+=maxi;
- int res=sum-e+syw*(syw-1)/2,flag=0;;
- for(int i=1;i<=n;i++){
- if(c[i]==0){
- flag=1;
- }
- }
- if (flag==1)
- {
- res-=maxi*(maxi-1)/2;
- }
- cout<<res<<endl;
- maxi=syw=sum=say=e=0;
- for(int i=1;i<=n;i++)
- c[i]=0;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement