【HDU OJ 4514】湫湫系列故事——设计风景线

来源:互联网 发布:黑科技优化电脑 编辑:程序博客网 时间:2024/05/08 10:06

湫湫系列故事——设计风景线

Problem Description
  随着杭州西湖的知名度的进一步提升,园林规划专家湫湫希望设计出一条新的经典观光线路,根据老板马小腾的指示,新的风景线最好能建成环形,如果没有条件建成环形,那就建的越长越好。
  现在已经勘探确定了n个位置可以用来建设,在它们之间也勘探确定了m条可以设计的路线以及他们的长度。请问是否能够建成环形的风景线?如果不能,风景线最长能够达到多少?
  其中,可以兴建的路线均是双向的,他们之间的长度均大于0。

Input
  测试数据有多组,每组测试数据的第一行有两个数字n, m,其含义参见题目描述;
  接下去m行,每行3个数字u v w,分别代表这条线路的起点,终点和长度。

  [Technical Specification]
  1. n<=100000
  2. m <= 1000000
  3. 1<= u, v <= n
  4. w <= 1000

Output
  对于每组测试数据,如果能够建成环形(并不需要连接上去全部的风景点),那么输出YES,否则输出最长的长度,每组数据输出一行。

Sample Input
3 3
1 2 1
2 3 1
3 1 1

Sample Output
YES

#include<cstdio>#include<cstring>#include<queue>#include<algorithm>#define K 100011using namespace std;struct node{    int fo,to,val,next;}st[K*20];bool vis[K],H;int dis[K],num;int head[K];int bo[K];int N,M,ans,cot;void add(int x,int y,int z){    node E={x,y,z,head[x]};    st[num]=E;    head[x]=num++;}void BFS(int fx){    queue <int> q;    while(!q.empty())    q.pop();    memset(dis,0,sizeof(dis));    memset(vis,false,sizeof(vis));    vis[fx]=true;    ans=0;    cot=fx;    q.push(fx);    while(!q.empty())    {        int w=q.front();        q.pop();        for(int i=head[w];i!=-1;i=st[i].next)        {           node E=st[i];           if(!vis[E.to]&&dis[E.to]<E.val+dis[w])           {            vis[E.to]=true;            dis[E.to]=E.val+dis[w];             if(dis[E.to]>ans)            {                ans=dis[E.to];                cot=E.to;            }            q.push(E.to);          }        }    }}int find(int p){    int ch=p;    int t;    while(p!=bo[p])    p=bo[p];    return p;}void KL(int x,int y){    int fx=find(x);    int fy=find(y);    if(fx!=fy)    bo[fy]=fx;    else    H=true;}int main(){    int i,x,y,z,o;    while(scanf("%d%d",&N,&M)!=EOF)    {        num=0;        for(i=0;i<=N;i++)        bo[i]=i;        H=false;        memset(head,-1,sizeof(head));        for(i=1;i<=M;i++)        {            scanf("%d%d%d",&x,&y,&z);            o=x;            if(H)            continue;            KL(x,y);            add(x,y,z);            add(y,x,z);        }        if(H)        {            printf("YES\n");            continue;        }            BFS(o);            BFS(cot);            printf("%d\n",ans);    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 移动手机用联通卡网速慢怎么办 移动手机插联通卡没反应怎么办 移动手机办了联通大王卡怎么办 qq被冻结但是有至尊宝怎么办 qq被冻结了有至尊宝怎么办 移动电话卡注销了里面的钱怎么办 罗麦的oa上经理喜报没截图怎么办 工行融e联登录密码忘了怎么办 融e借有额度秒拒怎么办 工行银行柜台办理融e借怎么办 地球末日生存破解版金币没了怎么办 手机被别人骗走了里面的微信怎么办 在微信里面被做微商的骗了钱怎么办 在qq上骗了人50怎么办 被3m多酶清洗液滴到皮肤怎么办 做3m赔了9万怎么办 在携程网上订的酒店发票怎么办 滴滴滴取消订单电话打不通怎么办 百度云容量2068g满了怎么办 淘宝电脑端描述图片间隔大怎么办 手机上下载游戏自动扣费怎么办 苹果手机下载游戏自动扣费怎么办 用手机账号登陆游戏换手机怎么办 在qq上被骗充q币怎么办 微信借钱后删了好友怎么办 财付通绑定了其它人的身份证怎么办 微信支付密码忘了没绑银行卡怎么办 微信没有绑银行卡忘记密码怎么办 威信解绑银行卡支付密码望了怎么办 买了个qq号绑定了财付通怎么办 淘宝买的东西下架了怎么办 微信红包充话费充错了怎么办 手机qq不能发红包或转账怎么办 qq给人发红包被骗了怎么办 qq发红包对方看不不到怎么办 手机浏览器支付页面弹不出来怎么办 新手机登录微信需要验证怎么办 手机淘宝注册账号换手机号后怎么办 冒充微信好友诈骗被骗了怎么办 刚刚激活的电信手机号码忘了怎么办 用手机充话费充错了怎么办