zoukankan      html  css  js  c++  java
  • 1888. Pilot Work Experience(dfs+bfs)

    1888

    dfs找出连通块 块内构造数据 bfs找出最值 

    如果有多个连通块 那max就为49 可以起点不同  这样记得修改后面的数据

    写的老长了。。

      1 #include <iostream>
      2 #include<cstdio>
      3 #include<cstring>
      4 #include<algorithm>
      5 #include<stdlib.h>
      6 #include<vector>
      7 #include<queue>
      8 using namespace std;
      9 vector<int>ed[55];
     10 int vis[55],gg,p,g,maxz,o[55],pp[55][55],q[55];
     11 int w[55],mm[55];
     12 void dfs(int u)
     13 {
     14     gg++;
     15     pp[g][gg] = u;
     16     int i;
     17     for(i = 0 ; i < (int)ed[u].size() ; i++)
     18     {
     19         int k = ed[u][i];
     20         if(!o[k])
     21         {
     22             o[k] = 1;
     23             dfs(k);
     24         }
     25     }
     26 }
     27 int bfs(int u,int k)
     28 {
     29     int i,tt=0;
     30     for(i = 1; i <= q[k] ; i++)
     31     {
     32         vis[pp[k][i]] = 0;
     33     }
     34     queue<int>qq;
     35     qq.push(u);
     36     vis[u] = 1;
     37     while(!qq.empty())
     38     {
     39         int k = qq.front();
     40         tt = max(vis[k],tt);
     41         qq.pop();
     42         for(i = 0 ; i < (int)ed[k].size() ; i++)
     43         {
     44             int v = ed[k][i];
     45             if(vis[v]>50)
     46             return -1;
     47             if(vis[v]&&abs(vis[v]-vis[k])!=1)
     48             {
     49                 return -1;
     50             }
     51             if(!vis[v])
     52             {
     53                 vis[v] = vis[k]+1;
     54                 qq.push(v);
     55             }
     56         }
     57     }
     58     if(maxz<tt)
     59     {
     60         maxz = tt;
     61         mm[k] = maxz;
     62         for(i = 1; i <= q[k] ; i++)
     63        {
     64            w[pp[k][i]] = vis[pp[k][i]];
     65        }
     66     }
     67     return 1;
     68 }
     69 int main()
     70 {
     71     int n,i,j;
     72     scanf("%d%d",&n,&p);
     73     for(i = 1; i <= n ; i++)
     74     {
     75         int u,v;
     76         scanf("%d%d",&u,&v);
     77         ed[u].push_back(v);
     78         ed[v].push_back(u);
     79     }
     80     g = 1;
     81     for(i = 1; i <= p ; i++)
     82     {
     83         if(!o[i])
     84         {
     85             o[i] =1;
     86             dfs(i);
     87             q[g] = gg;
     88             gg=0;g++;
     89         }
     90     }
     91     int nu=0;
     92     for(i = 1; i < g ; i++)
     93     {
     94         int kk=0;
     95         maxz=0;
     96         for(j = 1; j <= q[i] ; j++)
     97         {
     98             if(bfs(pp[i][j],i)>0)
     99             {
    100                 kk=1;
    101             }
    102         }
    103         if(!kk)
    104         {
    105             maxz=0;
    106             break;
    107         }
    108     }
    109     if(maxz==0)
    110     printf("-1
    ");
    111     else
    112     {
    113         if(g>2)
    114         {
    115             printf("49
    ");
    116             for(i = 1 ; i <= q[1] ; i++)
    117             w[pp[1][i]]+=(50-mm[1]);
    118         }
    119         else
    120         {
    121             printf("%d
    ",maxz-1);
    122         }
    123         for(i = 1; i <= p ; i++)
    124         printf("%d ",w[i]);
    125         puts("");
    126     }
    127     return 0;
    128 }
    View Code

     

  • 相关阅读:
    常用的XML读写
    未能使用提供程序 "RsaProtectedConfigurationProvider" 进行解密 的解决办法
    (原创)Urlrewrite 独立配置文件的使用方法
    The Two Interceptors: HttpModule and HttpHandlers
    根据最后修改时间查询存储过程
    Net下WinForm皮肤插件资源
    C# 主线程 辅助线程
    浅述WinForm多线程编程与Control.Invoke的应用
    ASP.NET实现图片防盗链
    URLRewrite 实现方法详解
  • 原文地址:https://www.cnblogs.com/shangyu/p/3372808.html
Copyright © 2011-2022 走看看