首页 > 其他分享 >AtCoder Beginner Contest 204

AtCoder Beginner Contest 204

时间:2024-04-07 14:11:18浏览次数:23  
标签:AtCoder cnt const 204 Beginner int maxn find define

E - Rush Hour 2
设函数f(t)=t+ci+di/(t+1);
易得当t=sqrt(di)-1时取最小
所以根据时间来做dij
当时间大于sqrt(di)-1时直接加入即可
同时用并查集来查看1和n是否联通即可
ac code:

点击查看代码
#include<bits/stdc++.h>
#define int long long
#define all(x) x.begin(),x.end()
#define rall(x) x.rbegin(),x.rend()
#define pb push_back
#define pii pair<int,int>
using namespace std;
const int mod=998244353;
const int maxn=500050;
int n,m,s,cnt;
const int inf=1e18;
int dis[maxn],h[maxn],to[maxn],c[maxn],nxt[maxn],vis[maxn],d[maxn];
struct node{
    int v,w;
    friend bool operator <(node a,node b){
        return a.w>b.w;
    }
};
priority_queue<node>q;
int f[maxn];
int find(int x){
    return f[x]==x?x:f[x]=find(f[x]);
}
void add(int a,int b,int c1,int d1){
    to[++cnt]=b;
    c[cnt]=c1;
    d[cnt]=d1;
    nxt[cnt]=h[a];
    h[a]=cnt;
}
void dijkstra(){
    for(int i=0;i<=n;i++)dis[i]=inf;
    dis[s]=0;
    node tmp;
    tmp.v=s;tmp.w=0;q.push(tmp);
    while(!q.empty()){
        int u=q.top().v,nowt=q.top().w;q.pop();
        if(vis[u])continue;vis[u]=1;
        for(int i=h[u];i;i=nxt[i]){
            int t=nowt;
            if(t<=round(sqrt(d[i]))-1)t=round(sqrt(d[i]))-1;
            if(dis[to[i]]>t+c[i]+(d[i]/(t+1))){
                dis[to[i]]=t+c[i]+(d[i]/(t+1));
                tmp.w=dis[to[i]];
                tmp.v=to[i];
                q.push(tmp);
            }
        }
    }
}
void solve(){
    cin>>n>>m;
    s=1;
    for(int i=1;i<=n;i++)f[i]=i;
    for(int i=1,u,v,w,k;i<=m;i++){
        cin>>u>>v>>w>>k;
        add(u,v,w,k);add(v,u,w,k);
        f[find(u)]=find(v);
    }
    if(find(1)!=find(n)){cout<<-1;return;}
    dijkstra();
    cout<<dis[n];
}
signed main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
    int _=1;
//    cin>>_;
    while(_--)solve();
}

标签:AtCoder,cnt,const,204,Beginner,int,maxn,find,define
From: https://www.cnblogs.com/archer233/p/18118940

相关文章

  • AtCoder Beginner Contest 348
    A-PenaltyKick(abc348A)题目大意给定\(n\),输出\(ooxooxoox...\),长度为\(n\)。解题思路按题意模拟即可。神奇的代码n=int(input())ans="oox"*(n//3)+"o"*(n%3)print(ans)B-FarthestPoint(abc348B)题目大意给定\(n\)个点,对每个点,求出与其......
  • AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    D-aabababaa根据题意从左往右进行分析如果当前该字母为a那么存在两种情况一种为b的数量为0一种为剩余的k的数量小于右边所有情况的总和其总和对应为C(剩余的长度,b的个数)反之则为b点击查看代码intget(intx,inty){intans=1;for(inti=1;i<=y;i++){ans=(x-i......
  • SGM2048
    这份文件是关于SGM2048低噪声、宽带宽、高电源抑制比(PSRR)、低压降线性稳压器(LDO)的高级数据手册。以下是其核心内容的概述:产品概述:SGM2048是一款单输出低压降稳压器,适用于需要极低压降电压和高达1A输出电流的超高性能电源抑制的应用。使用先进的BiCMOS工艺和PMOSFET通......
  • YuanDaiMa2048博客文章总览
    YuanDaiMa2048博客文章总览不定期更新学习中遇到的问题以及学习笔记…一、基础概念最新流行IT技术正则化概念及使用正则表达式基本概念正则表达式与正则化[日常使用]Win+R[日常使用]Shell常用命令dos和cmd二、科研工具[实验室服务器使用]使用VSCode、PyCharm、Mo......
  • 信息学奥赛一本通题目解析:1204:爬楼梯(记忆化递归)
    【题目描述】树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。【输入】输入包含若干行,每行包含一个正整数N,代表楼梯级数,1≤N≤30。【......
  • AtCoder Beginner Contest 347 A~F
    AtCoderBeginnerContest347A~F-知乎(zhihu.com)Tasks-AtCoderBeginnerContest347A.Divisible(循环)代码#include<bits/stdc++.h>usingnamespacestd;voidsolve(){intn,k;cin>>n>>k;for(inti=0;i<n;i++){......
  • KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)
    题目链接https://atcoder.jp/contests/abc200A-Century简单的abs(n-1)/100+1即可B-200thABC-200按题意写代码点击查看代码voidsolve(){intn,k;cin>>n>>k;for(inti=1;i<=k;i++){if(n%200==0)n/=200;elsen=n*1000+200;}......
  • AtCoder Beginner Contest 346 G
    #G-Alone(atcoder.jp)ABC346这一场来说相对比较简单,F是一个细节比较多的二分,G也算是一个比较板子的题。简单说一下G题的思路。其实比较容易想到用两个数组维护第i个数\(a_i\)在第i位之前出现的位置,以及第i个数在第i位之后出现的位置。那么当前位的能够满足的......
  • Public Easy Round #2 E. 2048
    Descriptionpb大师喜欢玩2048。pb大师在一个\(1\timesn\)的网格上玩2048,初始\(n\)个格子都是空的。游戏会进行若干轮,每轮将发生如下事件:如果没有空位,游戏结束。否则随机一个\(1\)到\(m\)的数,随机到\(i\)的概率是\(p_i\),再等概率随机一个空位,在空位中填入\(......
  • [ABC347] AtCoder Beginner Contest 347 题解
    [ABC347]AtCoderBeginnerContest347题解A模拟。BSA模板,把所有子串丢进哈希表里即可。C逆天题,这个分讨并不显然。考虑计算所有天数到今天的偏移量,然后如果最远的和最近的天数的距离\(\leA\)肯定可以,否则可以把所有天向右平移一段距离,然后使得最远的天到达第二周的......