zoukankan      html  css  js  c++  java
  • POJ 2485 Highways && HDU1102(20/200)

    题目链接:Highways


    没看题,看了输入输出。就有种似曾相识的感觉,果然和HDU1102 题相似度99%,可是也遇到一坑

    cin输入居然TLE,cin的缓存不至于这么狠吧,题目非常水。矩阵已经告诉你了。就敲个模板就是了,5分钟。1A


    题意就是打印,最小生成树的最大边权。改了改输入,水过

    这个题完了。我的个人POJ计划进度以完毕 20/200,这当中主要是图论的题。等下周把POJ计划图论的题目打完,就回头打模拟!我就不信还能比图论难


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <algorithm>
    const int N = 501;
    const int INF = 1e8;
    using namespace std;
    int dis[N],mapp[N][N];
    bool vis[N];
    int n,ans;
    void init()
    {
        ans = 0;
        memset(vis,0,sizeof(vis));
    }
    void Prim()
    {
        int pos,minn;
        for(int i = 0;i<n;i++)
            dis[i] = mapp[0][i];
        vis[0] = true;
        for(int i = 0;i<n;i++)
        {
            minn = INF;
            for(int j = 0;j<n;j++)
            {
                if(!vis[j] && dis[j] < minn)
                {
                    minn = dis[j];
                    pos = j;
                }
            }
            vis[pos] = true ;
    
            if(minn > ans && minn!=INF)
                ans = minn;
    
            for(int k = 0;k<n;k++)
            {
                if(!vis[k] && dis[k] > mapp[pos][k])
                    dis[k] = mapp[pos][k];
            }
        }
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            init();
            scanf("%d",&n);
            for(int i = 0;i<n;i++)
            {
                for(int j = 0;j<n;j++)
                    scanf("%d",&mapp[i][j]);
            }
            Prim();
            printf("%d
    ",ans);
        }
        return 0;
    }

    HDU1102


    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    using namespace std;
    const int N = 110;
    const int MAX = 9999999;
    int map[N][N],n;
    int dis[N],vis[N];
    int a,b;
    int sum = 0;
    int PRIM()
    {
        memset(dis,0,sizeof(dis));
        for(int i=1;i<=n;i++)
            dis[i]=map[1][i];
        vis[1]=1;
        int wz = 0;
        for(int i=2;i<=n;i++)
        {
            int min= MAX;
    
            for(int j=1;j<=n;j++)
            {
                if(dis[j]<min&&!vis[j])
                {
                    min=dis[j];
                    wz=j;
                }
            }
             if(min<MAX)
            {
                vis[wz]=1;
                sum+=min;
            }
            else
                return -1;
            for(int j=1;j<=n;j++)
            {
                if(!vis[j]&&map[wz][j]<dis[j])
                    dis[j]=map[wz][j];
            }
        }
        return sum;
    }
    int main()
    {
        int q;
       while (~scanf("%d",&n))
       {
           sum = 0;
        for(int i = 1;i<=n;i++)
        {
            for(int j = 1;j<=n;j++)
            {
                scanf("%d",&map[i][j]);
            }
        }
        memset(vis,0,sizeof(vis));
        scanf("%d",&q);
    
        for(int i = 0;i<q;i++)
        {
            scanf("%d%d",&a,&b);
            map[a][b] = 0;
            map[b][a] = 0;
        }
       sum = PRIM();
        printf("%d
    ",sum);
       }
        return 0;
    }


  • 相关阅读:
    紫微斗数诸星分级及分类
    n次独立重复试验暨伯努利试验
    信息系统项目管理师上午综合知识试题解析: 项目集治理
    三点估算和PERT技术
    自己写操作系统---bootsector篇
    硬盘分区表知识—详解硬盘MBR
    如何在自定义端口上运行 Spring Boot 应用程序?
    查询所有同学的学号、姓名、选课数、总成绩
    查询平均成绩大于60分的同学的学号和平均成绩
    查询“001”课程比“002”课程成绩高的所有学生的学号;
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7131580.html
Copyright © 2011-2022 走看看