首页 > 其他分享 >题解 醋溜便当

题解 醋溜便当

时间:2023-07-12 23:56:05浏览次数:39  
标签:fu fv int 题解 边权 便当 正边权 回路 醋溜

题目链接

题目让我们找出每个点是否存在长度 \(\in[x,k\times x]\) 的回路,若找到一长度为 \(a(0<a\le x)\) 的回路,那么必然存在 \(pa\in[x,k\times x](p\in \Z)\),若找到长度 \(\in[x,k\times x]\) 的回路,直接符合条件。所以问题转化为求是否存在 \(\in[1,k\times x]\) 的回路,只需找出最小正权值进行比对即可。

由于该题目出现零边权和正边权,先来观察如下两种特殊的回路情况:

由于本题可以重复经过点和边,所以有如下结论:
对于存在0边权的图,最短回路便是先走小的正边权,再走0边权;对于不存在0边权的图,最短回路是走两遍小的正边权。

注意到本题是无向图,所以对于一个连通块,是共用一个最短回路的,于是使用并查集维护连通块,再按照上面两个情况分类讨论,即可解出每个点的最短回路。

代码:

int main() {
    cin>>n>>m>>x>>k;
    for(int i=1;i<=n;i++) {
        dis[i]=INF;
        fa[i]=i;
    }
    for(int i=1;i<=m;i++) {
        cin>>u[i]>>v[i]>>w[i];
        if(!w[i]) {
            int fu=find(u[i]),fv=find(v[i]);
            if(fu!=fv) fa[fu]=fv;
        }
    }
    for(int i=1;i<=m;i++) {
        int fu=find(u[i]),fv=find(v[i]);
        if(w[i]) {
            if(fu==fv) {
                dis[fu]=min(dis[fu],(LL)w[i]);
            }
            else {
                dis[fu]=min(dis[fu],(LL)2*(LL)w[i]);
                dis[fv]=min(dis[fv],(LL)2*(LL)w[i]);
            }
        }
    }
    for(int i=1;i<=n;i++) {
        if(dis[find(i)]<=k*x) cout<<1<<' ';
        else cout<<"0 ";
    }
    return 0;
}

标签:fu,fv,int,题解,边权,便当,正边权,回路,醋溜
From: https://www.cnblogs.com/zhangyuzhe/p/17549184.html

相关文章

  • 【题解】CF gym 104337 G. Guess the Polynomial
    statement:https://codeforces.com/gym/104337/problem/G。即求\(f(x)=\sum\limits_{i=0}^{p-2}a_ix^i\),其中只有不超过\(n\)个\(a_i\)非\(0\)。记:\[\begin{aligned}A_{n}^{k}&=\sum_{i\equivk\pmod{n}}a_i=\frac{1}{n}\sum_{i=0}^{n-1}f(\omega_{n}^{......
  • CF1450C2 题解
    题目传送门再不写题解社贡要掉到\(0\)了。题目分析显然如果\(3\)个格子构成了满足获胜条件的情况,这\(3\)个格子模\(3\)的余数各不相同。那么我们将格子按模\(3\)的余数分为\(3\)类,只要保证相邻\(3\)个格子中有\(2\)个不同就行了,不需要动第\(3\)个。我们令......
  • Facetook Priority Wall 题解
    题目传送门一道模拟题。用一个map存储每个人的优先级因子,然后存进vector里进行排序。难点在于分辨\(X\)和\(Y\)与当前是什么操作。不过需要注意,只要出现了名字就需要输出,且我们认为与你没关系的人不加分。Code#include<bits/stdc++.h>#definelllonglong#define......
  • centos7ping不通主机却能够上网时的问题解决方案
       ......
  • Codeforeces #1844 A~D题解
    Codeforeces#1844A~D题解ASubtractionGame博弈论A+Bproblem由于只有两种数字可选,若石子数量为a+b,先手选完之后必然为a或b,因此后手可以直接选完BPermutations&Primes构造构造方法:35791108642,这样把1放中间可以让最多的区间拿到1,接下来避免同时拿......
  • 「Network」题解
    「CEOI2012」NetworkSolutiontoQuestionⅠ首先缩点(当然也可以不缩?),然后跑一遍DFS即可。//w为联通分量里的节点个数inlinevoiddfs(constint&u){ ans1[u]=w[u]; for(intv:G_scc[u]) dfs(v),ans1[u]+=ans1[v];}SolutiontoQuestionⅡ观察缩完点后......
  • 正方形鱼池题解
    首先这道题\(T\)的范围很小,而\(N\)的范围却很大,所以我们只能枚举树那么我们如何枚举呢,树有上下左右之分,看起来十分难枚举,现在让我们仔细分析一下:水池的边长就等于\(min(上下界的距离,左右界的距离)\)这时我们就可以开始枚举了,我枚举的是左右界那么我们此时就可以发现上下界的两......
  • 题解 [NOIP2011 提高组] 聪明的质监员
    题目链接不难发现,\(W\)越大,\(y_i\)以及\(y\)就越小,\(W\)越小,\(y_i,y\)就越大。所以这是一个二分答案。考虑如何\(check\)。观察\[y_i=\sum\limits_{j=l_i}^{r_i}[w_j\geW]\times\sum\limits_{j=l_i}^{r_i}[w_j\geW]v_j\]不难发现,乘号的前后都是区间和的形式,有......
  • 【开机10】解决出现问题,你的PIN不可用,单击以重新设置PIN 无法打开相机 设置我的PIN 登
    \(弄了1.5个小时,找到这个视频,终于弄好了!!!!!!\)\(如果各位基友出现这种问题,可以参考。\)【开机10】解决出现问题,你的PIN不可用,单击以重新设置PIN无法打开相机设置我的PIN登录选项诊断启动禁用服务后问题解决......
  • 洛谷 P4869 albus就是要第一个出场 题解
    洛谷P4869albus就是要第一个出场题意给定一个长度为\(n\)的序列\(A\),设可重集合\(S=\left\{\operatorname{xor}_{i=1}^nA_ix_i\midx_i\in\{0,1\}\right\}\),即\(S\)为\(A\)的所有子集的异或和构成的集合。给定一个数\(k\),求\(k\)在\(S\)中的排名。如果\(S\)中......