当前位置: 首页 > news >正文

1614: [Usaco2007 Jan]Telephone Lines架设电话线

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1614

做法:二分答案

首先附上让我找了两天错的代码

#include<queue>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct data{int to,next,c;}e[20001];
int n,p,k,cnt,head[1001],dis[1001],ans=-1;
bool vis[1001];
void insert(int u,int v,int w)
{cnt++;e[cnt].to=v;e[cnt].c=w;e[cnt].next=head[u];head[u]=cnt;}
bool spfa(int x)
{
    int sum,u,v;
    queue<int>q;
    q.push(1);
    memset(dis,127/3,sizeof(dis));
    dis[1]=0;
    while(!q.empty())
    {
        u=q.front();q.pop();vis[u]=0;
        for(int i=head[u];i;i=e[i].next)
        {
            v=e[i].c;
             if(e[i].c>x) sum=dis[u]+1;
             else sum=dis[u];
             if(dis[v]>sum)
             {
                dis[v]=sum;
                if(!vis[v])
                {
                    vis[v]=1;
                    q.push(v);
                }
             }
        }
    }
    if(dis[n]<=x)
    return 1;
    return 0;
}
int main()
{
    scanf("%d%d%d",&n,&p,&k);
    for(int i=1;i<=p;i++)
    {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            insert(u,v,w);insert(v,u,w);
    }
    int l=0,r=1000000;
    while(l<=r)
    {
               int mid=(l+r)>>1;
               if(spfa(mid)){ans=mid;r=mid-1;}
               else l=mid+1;
               } 
    printf("%d",ans);
    return 0;
}
WA

最后找到的是dis[n]<=k写成了dis[n]<=x

#include<queue>
#include<iostream>
#include<cstdio>
#include<cstring>
#define inf 0x7fffffff
using namespace std;
struct data{int to,next,c;}e[20001];
int n,p,k,cnt,head[1001],dis[1001],ans=-1;
bool vis[1001];
void insert(int u,int v,int w)
{cnt++;e[cnt].to=v;e[cnt].c=w;e[cnt].next=head[u];head[u]=cnt;}
bool spfa(int x)
{
    int sum,u,v;
    queue<int>q;
    q.push(1);
    memset(dis,127/3,sizeof(dis));
    dis[1]=0;
    while(!q.empty())
    {
        u=q.front();q.pop();vis[u]=0;
        for(int i=head[u];i;i=e[i].next)
        {
            v=e[i].to;
             if(e[i].c>x) sum=dis[u]+1;
             else sum=dis[u];
             if(dis[v]>sum)
             {
                 dis[v]=sum;
                 if(!vis[v])
                 {
                     vis[v]=1;
                     q.push(v);
                 }
             }
        }
    }
    if(dis[n]<=k)
    return 1;
    return 0;
}
int main()
{
    scanf("%d%d%d",&n,&p,&k);
    for(int i=1;i<=p;i++)
    {
            int u,v,w;
            scanf("%d%d%d",&u,&v,&w);
            insert(u,v,w);insert(v,u,w);
    }
    int l=0,r=1000000;
    while(l<=r)
    {
               int mid=(l+r)>>1;
               if(spfa(mid)){ans=mid;r=mid-1;}
               else l=mid+1;
               } 
    printf("%d",ans);
    return 0;
}
AC

So sad,but I will be fine

 以上By optimistic_LQ_double

转载于:https://www.cnblogs.com/LQ-double/p/6048949.html

相关文章:

  • DataGridView的按钮列的点击事件
  • MVC--数据增删改查(Razro语法)
  • 【node学习】协程
  • 【转】JVM 分代GC策略分析
  • centos下编译安装MySQL5.7.16
  • Meta标签
  • OpenCV例程实现人脸检测
  • bt和wifi的共存
  • 使用Powershell链接到Office 365
  • Bootstrap-datepicker设置开始时间结束时间范围
  • django中的filter详解
  • CDN学习笔记二(技术详解)
  • macOS 中的 Rootless 机制
  • python环境搭建-设置PyCharm软件的配色方案和Python解释器
  • mod_fastcgi和mod_fcgid的区别
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • cookie和session
  • ES6核心特性
  • Markdown 语法简单说明
  • Node.js 新计划:使用 V8 snapshot 将启动速度提升 8 倍
  • Spring Cloud Feign的两种使用姿势
  • SpriteKit 技巧之添加背景图片
  • yii2权限控制rbac之rule详细讲解
  • 如何用vue打造一个移动端音乐播放器
  • 我的业余项目总结
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 应用生命周期终极 DevOps 工具包
  • #DBA杂记1
  • #Linux(帮助手册)
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (zt)最盛行的警世狂言(爆笑)
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二十三)Flask之高频面试点
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (五)关系数据库标准语言SQL
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)ORM
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • .Net 4.0并行库实用性演练
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 反编译_.net反编译的相关问题
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • @Autowired多个相同类型bean装配问题
  • @PreAuthorize注解
  • @Transactional类内部访问失效原因详解