zoukankan      html  css  js  c++  java
  • UVALive 7456 Least Crucial Node

    题目链接

    题意: 给定一个无向图,一个汇集点,问哪一个点是最关键的,如果有多个关键点,输出序号最小的那个。



    因为数据量比较小,所以暴力搜索就行,每去掉一个点,寻找和汇集点相连的还剩几个点,以此确定哪个点是关键点。


    自己当时没有做出来,主要是以下几个原因:
    • 比赛时过于浮躁,翻译时不细心,没有看出是输出序号最小的点。
    • 把题想的过于复杂,和考点背道而驰。
    • 没有把握好逆向思维,既然要判断有几个点和汇集点相连,就去判断每个点是否和汇集点相连,正确的思路是判断汇集点和哪些点相连,即搜索的出发点是汇集点。

    总结:

    • 以后做题时,先去想最朴实无华的暴力求解。
    • 稳住心态尤其重要。

    CODE:
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<cmath>
    #include<algorithm>
    #include<queue>
    #include<stack>
    #include<deque>
    #include<map>
    #include<iostream>
    using namespace std;
    typedef long long  LL;
    const double pi=acos(-1.0);
    const double e=exp(1);
    const int N = 100009;
    
    int con[109][109];
    int check[109];
    int ans,tar,del,n;
    
    void DFS(int x)
    {
        int i,p,j;
    
        for(i = 1 ; i <= n; i++)
        {
            if(i == del || i == tar || i == x)
            {
                continue;
            }
    
            if(con[x][i] && check[i] == 0)
            {
                ans++;
    
                check[i] = 1;
                DFS(i);
            }
        }
    }
    
    int main()
    {
        int i,p,j,t;
        int a,b,m,mid,head,spot;
    
        while(scanf("%d",&n)!=EOF)
        {
            if(n == 0)
                break;
    
            memset(check,0,sizeof(check));
            memset(con,0,sizeof(con));
            head = 9999;
            spot = 1;
    
            scanf("%d",&tar);
            scanf("%d",&m);
    
            for(i=1; i<=m;i++)
            {
                scanf("%d%d",&a,&b);
                con[a][b] = con[b][a] = 1;
            }
    
            for(i = 1; i <= m; i++)
            {
                if(i == tar)
                    continue;
    
                ans = 0;
                del = i;
                check[tar] = 1;
                memset(check,0,sizeof(check));
    
                DFS(tar);
                mid = ans;
                if(head > mid)
                {
                    head = mid;
                    spot = i;
                }
            }
            printf("%d
    ",spot);
        }
        return 0;
    }
    
  • 相关阅读:
    序列化组件
    restful_framework之视图组件
    如何优化MYSQL数据库
    pycharm如何显示工具栏
    cmd常用命令
    pycharm如何回到过去某个时间
    RESTful API设计规范
    MyBatis之传入参数——parameterType(转)
    Spring3事务管理——使用@Transactional 注解(转)
    Eclipse 启动问题:'Initilizing Java Tooling' has encountered a problem(。。。)
  • 原文地址:https://www.cnblogs.com/daybreaking/p/10516788.html
Copyright © 2011-2022 走看看