zoukankan      html  css  js  c++  java
  • 连通图 求至少有给几个点信息才能传遍全图,至少添加几条边才能使全图联通

    第一个,染色后求入度为0的联通块。

    第二个,染色后求入度为0的联通块和出度为0的联通块的最大值。//入度和出度是对联通块说的。

    AC代码:

      1 #include<iostream>
      2 #include<string>
      3 #include<iomanip>
      4 #include<cstring>
      5 #include<cmath>
      6 #include<algorithm>
      7 #include<stack>
      8 #include<map>
      9 #include<stdio.h>
     10 #include<queue>
     11 using namespace std;
     12 # define maxn 200+10
     13 # define inf 0x3f3f3f3f
     14 # define ll long long
     15 int num,n,ans;
     16 int dfn[maxn];
     17 int low[maxn];
     18 int in[maxn];
     19 int out[maxn];
     20 int color[maxn];
     21 int col;
     22 int vis[maxn];
     23 int Map[maxn][maxn];
     24 map<int,int>
     25 stack<int>q;
     26 vector<int>wakaka[maxn];
     27 void tarjan(int u)
     28 {
     29     q.push(u);
     30     vis[u]=1;
     31     low[u]=dfn[u]=++num;
     32     int len=wakaka[u].size();
     33     for(int i=0; i<len; i++)
     34     {
     35         int v=wakaka[u][i];
     36         if(vis[v]==0)
     37         {
     38             tarjan(v);
     39             low[u]=min(low[u],low[v]);
     40         }
     41         else if(vis[v ]==1)
     42             low[u]=min(low[u],dfn[v]);
     43     }
     44     if(low[u]==dfn[u])
     45     {
     46         int t;
     47         col++;
     48         do
     49         {
     50             t=q.top();
     51             q.pop();
     52             vis[t]=-1;
     53             color[t]=col;
     54         }
     55         while(u!=t);
     56     }
     57 }
     58 int main()
     59 {
     60     memset(vis,0,sizeof(vis));
     61     memset(color,0,sizeof(color));
     62     memset(dfn,0,sizeof(dfn));
     63     memset(low,0,sizeof(low));
     64     memset(in,0,sizeof(in));
     65     memset(out,0,sizeof(out));
     66     num=col=0;
     67     int temp,ed;
     68     scanf("%d",&n);
     69     for(int i=1; i<=n; i++)
     70     {
     71         while(~scanf("%d",&temp)&&temp)
     72         {
     73             wakaka[i].push_back(temp);
     74         }
     75     }
     76     for(int i=1; i<=n; i++)
     77     {
     78         if(vis[i]==0)
     79         {
     80             tarjan(i);
     81         }
     82     }
     83     if(col==1)printf("%d
    %d
    ",1,0);
     84     else
     85     {
     86         int t1=0,t2=0;
     87         for(int i=1; i<=n; i++)
     88         {
     89             int t=color[i];
     90             int flag=0;
     91             int len=wakaka[i].size();
     92             for(int j=0; j<len; j++)
     93             {
     94                 int temp=wakaka[i][j];
     95                 if(color[temp]!=t)
     96                 {
     97                     in[color[temp]]++;
     98                     out[t]++;
     99                 }
    100             }
    101         }
    102         for(int i=1; i<=col; i++)
    103         {
    104             if(in[i]==0)t1++;
    105             if(out[i]==0)t2++;
    106         }
    107         printf("%d
    %d
    ",t1,max(t1,t2));
    108     }
    109     return 0;
    110 
    111 }
    112  
  • 相关阅读:
    top
    ls
    Redis持久化
    Redis数据库
    Redis对象类型
    Redis底层数据类型
    Redis面试问题
    Java源码解析——集合框架(五)——HashMap源码分析
    Java源码解析——集合框架(四)——LinkedListLinkedList原码分析
    Java源码解析——集合框架(三)——Vector
  • 原文地址:https://www.cnblogs.com/letlifestop/p/10262844.html
Copyright © 2011-2022 走看看