zoukankan      html  css  js  c++  java
  • 人活着系列Tanya和蔡健雅猪 (floyd)

    人活着系列之芳姐和芳姐的猪

    Time Limit: 1000MS Memory limit: 65536K

    题目描写叙述

    芳姐特别喜欢猪,所以,她特意养了m个猪圈,顺便在k条无向边,每条边有都有起点v,距离.....芳姐和猪们约定好。每天去一个固定猪圈去吃饭。芳姐为了不累着她可爱的猪们,想知道全部的猪吃饭走的最短路程是多少?

    输入

     第一行,猪的个数mk(1<=k<=1200).(猪的编号为1..m)

    N+1N头猪所在的猪圈号n+k+1行:u1<=w<=255)

    m个猪圈连通。

    输出

     

    演示样例输入

    3 4 5
    2
    3
    4
    1 2 1
    1 3 5
    2 3 7
    2 4 3
    3 4 5

    演示样例输出

    8

    提示


    開始以为,崔老师坑我们,不是最短路,就打成了最小生成树。kurskal

    感觉思路没错,没有的猪圈。就不加边。╮(╯▽╰)╭,挂了20遍。没过

    错误代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    const int INF = 65535;
    using namespace std;
    struct node{
        int u,v,w;
    }edge[1300];
    int n,m,father[610],l;
    bool vis[610];
    int cmp(const void *a ,const void *b)
    {
        struct node *X,*Y;
        X = (struct node *)a;
        Y = (struct node *)b;
        return X->w - Y->w;
    }
    void init()
    {
        l = 0;
        for(int i = 0;i<=m;i++)
            father[i] = i;
    }
    int findx(int r)
    {
        int i ,j;
        while(r!=father[r])
        {
             r= father[r];
        }
        i = r;
        while(father[i]!=r)
        {
            j = father[i];
            father[i] = r;
            i = j;
        }
        return r;
    }
    void kruskal()
    {
        int ans = 0;
        for(int i = 0;i<=l;i++)
        {
             int uu = findx(edge[i].u);
             int vv = findx(edge[i].v);
           //  printf("%d->%d = %d
    ",edge[i].u,edge[i].v,edge[i].w);
             if(uu!=vv)
                {
                    father[uu] = vv;
                    ans += edge[i].w;
                }
        }
        printf("%d
    ",ans);
    }
    int main()
    {
        int mm, a , b,c,k;
        scanf("%d%d%d",&n,&m,&k);
        init();
        for(int i = 1;i<=m;i++)
            vis[i] = 1;
    
        for(int i = 0;i<n;i++)
        {
            scanf("%d",&mm);
            vis[mm] = 0;
        }
        for(int i = 0;i<k;i++)
        {
            scanf("%d%d%d",&a,&b,&c);
            if(vis[a]==1 || vis[b]==1) continue;
    
            edge[l].u = a; edge[l].v = b; edge[l++].w = c;
        }
         qsort(edge,l,sizeof(edge[0]),cmp);
          kruskal();
        return 0;
    }

    AC

    后台数据比較水

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <cstring>
    #define INF 0x3f3f3f3f
    using namespace std;
    
    int n,m,KKK;
    int ma[651][651],a[400];
    
    void init()
    {
    	int i,j;
       for(i=1; i<=m;i++)
        {
            for( j=1; j<=m; j++)
    		{
    			if(i==j) ma[i][j] = 0;
    			else ma[i][j]=INF;
    		}
        }
    }
    int main()
    {
    
        int u,v,w,i,j,k;
    	scanf("%d%d%d",&n,&m,&KKK);
    //puts("1");
    	init();
    
        for(i=1; i<=n; i++)
    	{
    		scanf("%d",&a[i]);
    	}
    
    	for(i = 0;i<KKK;i++)
        {
    		scanf("%d%d%d",&u,&v,&w);
            ma[u][v]=ma[v][u]=w;
        }
    
        for( k=1; k<=m; k++)
    	{
             for( i=1; i<=m; i++)
    		 {
    			 for( j=1; j<=m; j++)
                {
    				if(ma[i][j] > ma[i][k] + ma[k][j])
    				{
    					ma[i][j] = ma[i][k] + ma[k][j];
    				}
                }
    		 }
    	}
    
        int sum , mi = INF;
        for(i=1; i<=m; i++)
        {
            sum=0;
            for(j=1; j<=n; j++)
    		{
    			sum += ma[i][a[j]];
    		}
            if(sum < mi)
                mi = sum;
        }
    
        printf("%d
    ",mi);
        return 0;
    } 
    
    
    
    /*****************************
    


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    eclipse中打断点debug无效
    Jenkins构建部署Maven项目
    自动生成实体类和xml
    session 控制单点登录
    eclipse team 没有svn
    easyui combobox 设置滚动条
    unkow jdbc driver : http://maven.apache.org
    easyui datagrid列显示图片
    mysql中计算日期整数差
    Map<String, Object>转Object,Object转 Map<String, Object>
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4620152.html
Copyright © 2011-2022 走看看