POJ 2421 Constructing Roads

版权声明:本文为博主原创文章,如能转载,不胜荣幸! https://blog.csdn.net/zxy160/article/details/79980145

POJ 2421
读题错误,认为是给出q次询问,每次算出u到v的路径上的最小路。
真正题意是,给出q对点,表示这q对已经联通,然后再求联通其他点所需的路径长度。
最小生成树prime模板,只要把联通的点变成0即可。

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
const int maxn=105;
const int inf=0x3f3f3f3f;
int n;
int mapp[maxn][maxn];
int dis[maxn];
int vis[maxn];
void init()
{
    memset(mapp,inf,sizeof(mapp));
    for(int i=0; i<=n; i++) mapp[i][i]=0;
}
int prime()
{
    memset(vis,0,sizeof(vis));
    int k=0;
    for(int i=1;i<=n;i++)
        dis[i]=mapp[1][i];
    vis[1]=1;
    int sum=0;
    while(k<n-1)
    {
        int minn=inf,index;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i]&&dis[i]<minn)
                minn=dis[i],index=i;
        }
        sum+=minn;
        vis[index]=1;
        k++;
        for(int i=1;i<=n;i++)
        {
            if(!vis[i]&&dis[i]>mapp[index][i])
                dis[i]=mapp[index][i];
        }
    }
    return sum;
}
int main()
{
    while(~scanf("%d",&n)&&n)
    {
        //init();
        //int m=n*(n-1)/2;
        for(int i=1; i<=n; i++)
        {
            for(int j=1;j<=n;j++)
            {
                scanf("%d",&mapp[i][j]);
            }
        }
        int q;
        scanf("%d",&q);
        for(int i=1;i<=q;i++)
        {
            int u,v,w;
            scanf("%d%d",&u,&v);
            //w=mapp[u][v];
            mapp[u][v]=mapp[v][u]=0;

            //mapp[u][v]=mapp[v][u]=w;
        }printf("%d\n",prime());
    }
    return 0;
}

Constructing Roads

08-29

DescriptionnnIn the days of yore, Han was a prosperous kingdom. But at the turn of the century, hard times fell upon the kingdom. A plague swept through the land, and barbarians galloped in from the north, burning farms, destroying roads, and pillaging villages. All that remained were a few isolated strongholds scattered throughout the land. It has now been nearly a decade since the last wave of barbarians stormed through, and the land breathes a sigh of relief. People are becoming revitalized with the hope that they can once again transform the kingdom back into its former glory.nnSince all the roads were destroyed, the strongholds were left in isolation, so the first order of business was to build a network of roads connecting all the strongholds. Each stronghold thought it would be a reasonable plan to start by building a road to the closest stronghold near it. If there were two strongholds of equal distance, the stronghold whose name comes before the other in the dictionary would be chosen. Each stronghold builds at its own rate, measured in feet/hour. Because they wished to finish as soon as possible, construction happened 24 hours a day, continuously advancing the construction site (the end of the road) towards the destination. Of course, construction on a road would stop if the road ran into another road or a city. At the beginning of the New Year, there was a big celebration, and all the strongholds began construction at the same time.nnLittle did the people of Han know that the barbarians had again infiltrated their kingdom and were carefully observing the progress of the roads. The barbarians were curious about the progress of the roads. In particular, they wanted answers to two type of questions.nnAfter exactly t hours since construction began on the New Year, what is the absolute minimum length of additional roads that still need to be built in order to connect all cities? These additional roads are allowed to join two cities, two construction sites, or a city and a construction site.nWhat is the fewest number of hours that must elapse since the New Year before the minimum length of additional roads that still need to be built is at most l?nWrite a program to answer these questions given Han’s construction plan.nnInputnnThere will be several test cases, each representing a possible scenario for Han. The first line of each test case will contain a positive integer number N, the number of strongholds (1 ≤ N ≤ 2 000). Each of the subsequent N lines will contain a description of a stronghold: a name consisting of letters ‘ a’ … ‘z’, the x and y coordinates of the position of the stronghold (in feet), and the construction rate (in feet/hour). The next lines will contain questions. The first integer on the line is either 1 or 2, representing the type of question. For type 1 questions, the next number is t, the time (in hours) in question. For type 2 questions, the next number is l, the length (in feet) in question. The questions will be terminated by a line with 0.nnThe input data is terminated by a line that contains one zero, and should not be processed.nnOutputnnFor each test case, output the answers to each question, formatted as in the sample output. If for question 2, at no point in time will there be only l feet of construction left, then print NEVER. All numeric answers should be printed to as many decimal places as you feel necessary. To get credit for the problem, however, your answer must be within 0.01 of our answer.nnSample Inputnn4nportland 0 0 3nseattle 0 10 2nnewyork 20 6 1nboston 20 0 1n1 0n1 2.0n1 3.0n2 29n2 1.0n0n2nbree -10 -10 1nbuckland 10 10 2n1 5n0n0nSample OutputnnKingdom 1n36.000 feet left at time 0.000n22.000 feet left at time 2.000n20.000 feet left at time 3.000n1.000 hours before 29.000 feet leftnNEVERnnKingdom 2n13.284 feet left at time 5.000nnEnd

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭