2024.9.19

news2024/9/20 1:13:21

[ABC266F] Well-defined Path Queries on a Namori

题面翻译

题目描述

给定一张有 N N N 个点、 N N N 条边的简单连通无向图和 Q Q Q 次询问,对于每次询问,给定 x i , y i x_i,y_i xi,yi,表示两点的编号,请你回答第 x i x_i xi 个点和第 y i y_i yi 个点之间是否有且仅有一条简单路径。

  • 什么是简单路径?

如果路径上的各顶点均不重复,则称这样的路径为简单路径。

输入格式

第一行包含一个整数 N N N

接下来 N N N 行,每行两个整数 u i , v i u_i,v_i ui,vi,表示第 i i i 条边连接的两个点;

再接下来一行包含一个整数 Q Q Q

最后 Q Q Q 行,每行两个整数 x i , y i x_i,y_i xi,yi,含义见题目描述。

输出格式

对于每次询问,输出一个字符串 YesNo,分别表示两点之间是否仅存在一条简单路径,每个询问分别输出一行。

样例

见原题面。

样例解析

样例 #1 解析:

对于第一次询问,从 1 1 1 2 2 2 有两条简单路径 ( 1 , 2 ) (1,2) (1,2) ( 1 , 3 , 2 ) (1,3,2) (1,3,2),所以输出 No

对于第二次询问,从 1 1 1 4 4 4 仅有一条路径 ( 1 , 4 ) (1,4) (1,4),所以输出 Yes

对于第三次询问,从 1 1 1 5 5 5 有两条简单路径 ( 1 , 2 , 5 ) (1,2,5) (1,2,5) ( 1 , 3 , 2 , 5 ) (1,3,2,5) (1,3,2,5),所以输出 No

数据范围

对于 30 % 30\% 30% 的数据, N ≤ 100 N \le 100 N100 Q ≤ N ( N − 1 ) 2 Q \le \frac{N(N-1)}{2} Q2N(N1)

对于 100 % 100\% 100% 的数据, 3 ≤ N ≤ 2 × 1 0 5 3 \le N \le 2 \times 10^5 3N2×105 1 ≤ u i < v i ≤ N 1 \le u_i<v_i \le N 1ui<viN 1 ≤ Q ≤ 2 × 1 0 5 1 \le Q \le 2 \times 10^5 1Q2×105 1 ≤ x i < y i ≤ N 1 \le x_i < y_i \le N 1xi<yiN,保证图没有重边或自环,且给定询问均不重复。

翻译 by @CarroT1212

题目描述

頂点に $ 1 $ から $ N $ の番号がついた $ N $ 頂点 $ N $ 辺の連結な単純無向グラフ $ G $ が与えられます。$ i $ 番目の辺は頂点 $ u_i $ と頂点 $ v_i $ を双方向に結んでいます。

以下の $ Q $ 個のクエリに答えてください。

  • 頂点 $ x_i $ から頂点 $ y_i $ に向かう単純パス(同じ頂点を $ 2 $ 度通らないパス)が一意に定まるか判定せよ。

输入格式

入力は以下の形式で標準入力から与えられる。

$ N $ $ u_1 $ $ v_1 $ $ u_2 $ $ v_2 $ $ \vdots $ $ u_N $ $ v_N $ $ Q $ $ x_1 $ $ y_1 $ $ x_2 $ $ y_2 $ $ \vdots $ $ x_Q $ $ y_Q $

输出格式

$ Q $ 行出力せよ。

$ i\ (1\ \leq\ i\ \leq\ Q) $ 行目には、頂点 $ x_i $ から頂点 $ y_i $ に向かう単純パスが一意に定まる場合 Yes、そうでない場合 No を出力せよ。

样例 #1

样例输入 #1

5
1 2
2 3
1 3
1 4
2 5
3
1 2
1 4
1 5

样例输出 #1

No
Yes
No

样例 #2

样例输入 #2

10
3 5
5 7
4 8
2 9
1 2
7 9
1 6
4 10
2 5
2 10
10
1 8
6 9
8 10
6 8
3 10
3 9
1 10
5 8
1 10
7 8

样例输出 #2

Yes
No
Yes
Yes
No
No
Yes
No
Yes
No

提示

制約

  • $ 3\ \leq\ N\ \leq\ 2\ \times\ 10^5 $
  • $ 1\ \leq\ u_i\ <\ v_i\leq\ N $
  • $ i\ \neq\ j $ ならば $ (u_i,v_i)\ \neq\ (u_j,v_j) $
  • $ G $ は $ N $ 頂点 $ N $ 辺の連結な単純無向グラフ
  • $ 1\ \leq\ Q\ \leq\ 2\ \times\ 10^5 $
  • $ 1\ \leq\ x_i\ <\ y_i\leq\ N $
  • 入力は全て整数

Sample Explanation 1

頂点 $ 1 $ から $ 2 $ に向かう単純パスは $ (1,2),(1,3,2) $ と一意に定まらないので、 $ 1 $ 個目のクエリの答えは No です。 頂点 $ 1 $ から $ 4 $ に向かう単純パスは $ (1,4) $ と一意に定まるので、$ 2 $ 個目のクエリの答えは Yes です。 頂点 $ 1 $ から $ 5 $ に向かう単純パスは $ (1,2,5),(1,3,2,5) $ と一意に定まらないので、$ 3 $ 個目のクエリの答えは No です。

//2024.9.19
//by white_ice
#include<bits/stdc++.h>
//#include"../../../need.cpp"
using namespace std;
#define int long long 
#define itn long long 
constexpr itn oo = 200005;
int n,q;int tag[oo],fa[oo];
bool vis[oo],is[oo];
struct nod{int v,nxt;}st[oo<<1];int head[oo],cnt;
__inline void add(int x,int y){st[++cnt]=(nod){y,head[x]};head[x]=cnt;}
main(void){
    //fre();
    cin.tie(0)->sync_with_stdio(0);
	cin >> n;for(int x,y,i=1;i<=n;++i){
		cin >> x >> y;
		add(x,y);add(y,x);
	}
    function<void(int,itn)>dfs1=[&](itn x,itn fat){
        if(vis[x]){
            int now=x; is[x]=1; x=tag[x];
            while(now!=x){is[x]=1;x=tag[x];}
            return void();
        } vis[x]=1;
        for(int i=head[x];i;i=st[i].nxt){
            int y=st[i].v;
            if(y==fat) continue;
            tag[y]=x; dfs1(y,x);
        }   
    };
    function<void(int,int)>dfs2=[&](int x,int fat){
        if(!is[x]) fa[x]=fa[fat];
        for(int i=head[x];i;i=st[i].nxt){
            int y=st[i].v;
            if(y==fat||is[y]) continue;
            dfs2(y,x);
        }
    }; dfs1(1,0);
	for(int i=1;i<=n;++i) if(is[i]){fa[i]=i;dfs2(i,0);}
	cin >> q;while(q--){
		int x,y;cin >> x >> y;
		cout << (fa[x]==fa[y]?"Yes":"No") << '\n';
	} cout << flush;exit (0);
}

直接在基环树上dfs,直接记录在环上各个点上分支的父亲即可


[ABC253F] Operations on a Matrix

题面翻译

存在 $ n $ 行 $ m $ 列的矩阵,给定 $ q $ 次操作,有 $ 3 $ 种格式。

  • 1 l r x:将 $ [l, r] $ 列的所有元素全部加上 $ x $。
  • 2 i x:将第 $ i $ 行的元素全部变为 $ x $。
  • 3 i j:输出矩阵 $ (i, j) $ 位置的元素值。

题目描述

縦 $ N $ 行、横 $ M $ 列の行列があり、はじめ全ての成分は $ 0 $ です。

以下のいずれかの形式で表されるクエリを $ Q $ 個処理してください。

  • 1 l r x : $ l $ 列目、$ l+1 $ 列目、$ \ldots 、 、 r $ 列目の成分全てに $ x $ を足す。
  • 2 i x : $ i $ 行目の成分全てを $ x $ で置き換える。
  • 3 i j : $ (i,\ j) $ 成分を出力する。

输入格式

入力は以下の形式で標準入力から与えられる。

$ N $ $ M $ $ Q $ $ \mathrm{Query}_1 $ $ \vdots $ $ \mathrm{Query}_Q $

$ i $ 番目に与えられるクエリを表す $ \mathrm{Query}_i $ は以下のいずれかの形式である。

$ 1 $ $ l $ $ r $ $ x $

$ 2 $ $ i $ $ x $

$ 3 $ $ i $ $ j $

输出格式

3 i j の形式の各クエリについて、答えを一行に出力せよ。

样例 #1

样例输入 #1

3 3 9
1 1 2 1
3 2 2
2 3 2
3 3 3
3 3 1
1 2 3 3
3 3 2
3 2 3
3 1 2

样例输出 #1

1
2
2
5
3
4

样例 #2

样例输入 #2

1 1 10
1 1 1 1000000000
1 1 1 1000000000
1 1 1 1000000000
1 1 1 1000000000
1 1 1 1000000000
1 1 1 1000000000
1 1 1 1000000000
1 1 1 1000000000
1 1 1 1000000000
3 1 1

样例输出 #2

9000000000

样例 #3

样例输入 #3

10 10 10
1 1 8 5
2 2 6
3 2 1
3 4 7
1 5 9 7
3 3 2
3 2 8
2 8 10
3 8 8
3 1 10

样例输出 #3

6
5
5
13
10
0

提示

制約

  • $ 1\ \leq\ N,\ M,\ Q\ \leq\ 2\ \times\ 10^5 $
  • 1 l r x の形式のクエリについて、$ 1\ \leq\ l\ \leq\ r\ \leq\ M $ かつ $ 1\ \leq\ x\ \leq\ 10^9 $
  • 2 i x の形式のクエリについて、$ 1\ \leq\ i\ \leq\ N $ かつ $ 1\ \leq\ x\ \leq\ 10^9 $
  • 3 i j の形式にクエリについて、$ 1\ \leq\ i\ \leq\ N $ かつ $ 1\ \leq\ j\ \leq\ M $
  • 3 i j の形式のクエリが一個以上与えられる
  • 入力は全て整数

Sample Explanation 1

行列は次のように変化します。 $ \begin{pmatrix}\ 0\ &\ 0\ &\ 0\ \ 0\ &\ 0\ &\ 0\ \ 0\ &\ 0\ &\ 0\ \ \end{pmatrix}\ \rightarrow\ \begin{pmatrix}\ 1\ &\ 1\ &\ 0\ \ 1\ &\ 1\ &\ 0\ \ 1\ &\ 1\ &\ 0\ \ \end{pmatrix}\ \rightarrow\ \begin{pmatrix}\ 1\ &\ 1\ &\ 0\ \ 1\ &\ 1\ &\ 0\ \ 2\ &\ 2\ &\ 2\ \ \end{pmatrix}\ \rightarrow\ \begin{pmatrix}\ 1\ &\ 4\ &\ 3\ \ 1\ &\ 4\ &\ 3\ \ 2\ &\ 5\ &\ 5\ \ \end{pmatrix} $

#include <bits/stdc++.h>
#define LL long long
#define lowbit(x) (x & -x)
using namespace std;

const int N = 200010;

int n, m, Q, last[N];
LL tr[N], ans[N];
vector<int> v[N];

struct query {
    int op, a, b, c;
} q[N];

void add(int x, int c)
{
    for(int i = x; i <= m; i += lowbit(i)) tr[i] += c;
}

LL sum(int x)
{
    LL res = 0;
    for(int i = x; i; i -= lowbit(i)) res += tr[i];
    return res;
}

int main()
{
    cin >> n >> m >> Q;

    for(int i = 1; i <= Q; i++) {
        scanf("%d%d%d", &q[i].op, &q[i].a, &q[i].b);
        if(q[i].op == 1) scanf("%d", &q[i].c);
        else if(q[i].op == 2) last[q[i].a] = i;
        else v[last[q[i].a]].push_back(i);
    }

    for(int i = 1; i <= Q; i++) {
        if(q[i].op == 1) add(q[i].a, q[i].c), add(q[i].b + 1, -q[i].c);
        else if(q[i].op == 2) for(auto item : v[i]) ans[item] = q[i].b - sum(q[item].b);  
        else printf("%lld\n", ans[i] + sum(q[i].b));
    }

    return 0;
}

多板的主席树题呢


[ABC259F] Select Edges

题面翻译

给定一棵 n n n 个节点的树,每条边有一个权值 w i w_i wi

现要求选择一些边,使得每个节点 i i i 相邻的边中被选中的不超过 d i d_i di 条,请求出最大边权和。

题目描述

$ N $ 頂点の木が与えられます。 $ i\ =\ 1,\ 2,\ \ldots,\ N-1 $ について、$ i $ 番目の辺は頂点 $ u_i $ と頂点 $ v_i $ を結ぶ重み $ w_i $ の辺です。

$ N-1 $ 本の辺のうちのいくつか( $ 0 $ 本または $ N-1 $ 本すべてでも良い)を選ぶことを考えます。 ただし、$ i\ =\ 1,\ 2,\ \ldots,\ N $ について、頂点 $ i $ に接続する辺は $ d_i $ 本までしか選べません。 選ぶ辺の重みの総和としてあり得る最大値を求めてください。

输入格式

入力は以下の形式で標準入力から与えられる。

$ N $ $ d_1 $ $ d_2 $ $ \ldots $ $ d_N $ $ u_1 $ $ v_1 $ $ w_1 $ $ u_2 $ $ v_2 $ $ w_2 $ $ \vdots $ $ u_{N-1} $ $ v_{N-1} $ $ w_{N-1} $

输出格式

答えを出力せよ。

样例 #1

样例输入 #1

7
1 2 1 0 2 1 1
1 2 8
2 3 9
2 4 10
2 5 -3
5 6 8
5 7 3

样例输出 #1

28

样例 #2

样例输入 #2

20
0 2 0 1 2 1 0 0 3 0 1 1 1 1 0 0 3 0 1 2
4 9 583
4 6 -431
5 9 325
17 6 131
17 2 -520
2 16 696
5 7 662
17 15 845
7 8 307
13 7 849
9 19 242
20 6 909
7 11 -775
17 18 557
14 20 95
18 10 646
4 3 -168
1 3 -917
11 12 30

样例输出 #2

2184

提示

制約

  • $ 2\ \leq\ N\ \leq\ 3\ \times\ 10^5 $
  • $ 1\ \leq\ u_i,\ v_i\ \leq\ N $
  • $ -109 \leq w_i \leq 109 $
  • $ d_i $ は頂点 $ i $ の次数以下の非負整数
  • 与えられるグラフは木である
  • 入力はすべて整数

Sample Explanation 1

$ 1,\ 2,\ 5,\ 6 $ 番目の辺を選ぶと、選ぶ辺の重みは $ 8\ +\ 9\ +\ 8\ +\ 3\ =\ 28 $ となります。これがあり得る最大値です。

//2024.9.19
//by white_ice
#include<bits/stdc++.h>
//#include"../../../need.cpp"
using namespace std;
#define int long long 
#define itn long long 
constexpr int oo = 300005;
int n,k;int d[oo];
itn mx[oo],f[oo],g[oo];
int cmp(itn x,itn y){return x>y;}
struct nod{itn v,w,nxt;}st[oo<<1];int cnt,head[oo];
__inline void add(int x,int y,itn z){st[++cnt]=(nod){y,z,head[x]};head[x]=cnt;}
main(void){
    //fre();
    cin.tie(0)->ios::sync_with_stdio(0);
    cin >> n;
    for(int i=1;i<=n;i++) cin>>d[i];
    for(int x,y,z,i=1;i<n;i++){
        cin >> x >> y >> z;
        add(x,y,z);add(y,x,z);
    }
    function<void(itn,int)>dfs=[&](int x,int fa){
        for(int i=head[x];i;i=st[i].nxt){
            int v=st[i].v;
            if(v==fa) continue;
            dfs(v,x); g[x]+=f[v];
        }
        int k=0;
        for(int i=head[x];i;i=st[i].nxt){
            int v = st[i].v;
            if(v!=fa) mx[++k]=g[v]+st[i].w-f[v];
        }
        sort(mx+1,mx+k+1,cmp);
        for(int i=1;i<d[x];i++){
            if(mx[i]<=0) break;
            g[x]+=mx[i];}
        f[x] = g[x];
        if(mx[d[x]]>0) f[x]+=mx[d[x]];
        if(!d[x]) g[x] = -1e9;
        for(int i=1;i<=k;i++) mx[i]=0;
    };dfs(1,0);
    cout << f[1] << '\n' << flush;
    exit (0);
}

考虑树上DP,在每个点枚举向父亲连边或向儿子连边

结合贪心,优先选大边权的,同时不选负边权的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2147484.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【读书笔记-《30天自制操作系统》-22】Day23

本篇内容比较简单&#xff0c;集中于显示问题。首先编写了应用程序使用的api_malloc&#xff0c;然后实现了在窗口中画点与画线的API与应用程序。有了窗口显示&#xff0c;还要实现关闭窗口的功能&#xff0c;于是在键盘输入API的基础上实现了按下按键关闭窗口。最后发现用上文…

初学者笔记本电脑玩转大模型系列二:微调谷歌Gemma模型

之前分享了《初学者笔记本电脑玩转大模型系列一&#xff1a;利用ollama跑大模型》&#xff0c;这不&#xff0c;Google发布了Gemma开放模型&#xff0c;同等参数尺寸性能最好的大模型&#xff0c;那么言归正传&#xff0c;如何在笔记本电脑微调Gemma模型呢&#xff1f;我们接下…

阿里云CTO:通义稳居全球最强开源大模型,性能接近GPT-4o

来源&#xff1a;首席数智官 9月19日&#xff0c;在2024杭州云栖大会上&#xff0c;阿里云CTO周靖人表示&#xff0c;阿里云正在围绕AI时代&#xff0c;树立一个AI基础设施的新标准&#xff0c;全面升级从服务器到计算、存储、网络、数据处理、模型训练和推理平台的技术架构体…

Temu应用全球下载量突破7.35亿次!美国占27%,还是主要市场

据了解&#xff0c;随着购物者更多选择Temu作为实惠的在线购物目的地&#xff0c;其月访问量在今年第一季度跃升至5亿次以上&#xff0c;应用下载量也大幅增加。据外媒报道&#xff0c;根据Stocklytics的最新数据&#xff0c;Temu应用程序截至目前的下载量已超过7.35亿次。 最新…

动态线程池(二)

动态线程池 环境搭建 启动Nacos和redis 安装Node-Exporter 安装Prometheus 安装Grafana 源码解析

鸢尾花书实践和知识记录[数学要素3-2乘除]

书的作者 文章目录 算术乘除&#xff1a;先乘除&#xff0c;后加减&#xff0c;括号内先算基本的乘法运算计算阶乘基本除法 向量的乘法&#xff1a;标量乘法&#xff0c;向量内积&#xff0c;逐项积标量乘法向量的内积对于inner和dot的实现方式的探究逐项积dot的计算过程 逐项…

MAC如何获取文件数字签名和进程名称

1、安装需要查看数字签名和进程名称的软件包 2、打开终端命令行(Terminal) 3、查找数字签名 在终端命令行中输入: codesign -dvv 安装的软件路径 2>&1 | grep "Authority=" | head -n 1 | cut -d = -f2”

PDF使用虚拟列表技术做渲染和加载带来的问题

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

JavaFX实现视频播放功能

一、前言 最近使用javaFx写了个简单的视频播放功能&#xff0c;可以实现打开本地视频播放。 二、实现 1.使用jdk8自带的javaFx包实现&#xff0c;首先定义一个类VideoPlayer。 代码如下&#xff1a; import javafx.application.Application; import javafx.application.Platf…

LAN8720A-CP-TR-ABC QFN-24 以太网收发器芯片

功能&#xff1a; 高性能收发器&#xff1a;支持10BASE-T和100BASE-TX标准&#xff0c;能够自动协商最佳速度和双工模式。 小尺寸&#xff1a;是业界尺寸最小的解决方案&#xff0c;适合空间受限的应用场景。 低功耗&#xff1a;功耗比现有的Microchip收发器低40%&#x…

【Unity】URP Rendering总结

unity-urp-rendering 介绍 个人学习总结&#xff0c;不定期更新 仓库 Unity版本&#xff1a;2022.3.42 Unity URP渲染管线下相关的渲染demo和总结 1. GPUInstance 1.1 Graphics.DrawMeshInstanced 1.2 Graphics.DrawMeshInstancedIndirect 1.3 MeshRenderer.SetPropertyBlock…

MTK芯片机型的“工程固件” 红米note9 5G版资源预览 写入以及改写参数相关步骤解析

小米机型:小米5 小米5x 米6 米6x 米8 米9 米10系列 米11系列 米12系列 mix mix2 mix2s mix3 max max2 max3 note3 8se 9se cc9系列 米play 平板系列等分享 红米机型:红米note4 红米note4x 红米note5 红米note6 红米note7 红米note8 红米note8pro 红米s2 红米note7pro 红米…

【C++算法】模拟算法

替换所有的问号 题目链接 替换所有的问号https://leetcode.cn/problems/replace-all-s-to-avoid-consecutive-repeating-characters/description/ 算法原理 代码步骤 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0; i < n; i){…

网络药理学:15、草稿暂存区

TCMSP 韦恩图在线网站 https://bioinfogp.cnb.csic.es/tools/venny/index.html String数据库参数详解&#xff1a;https://www.bilibili.com/video/BV1q64y1k7Zf?p16&vd_sourceaed4c634975918b14b7354ec93ce5389 David数据库可以用基因ID或者基因名。 KEGG数据库使用&am…

高效处理NPE!!

相信不少小伙伴已经被java的NPE(Null Pointer Exception)所谓的空指针异常搞的头昏脑涨,有大佬说过“防止 NPE&#xff0c;是程序员的基本修养。”但是修养归修养&#xff0c;也是我们程序员最头疼的问题之一&#xff0c;那么我们今天就要尽可能的利用Java8的新特性 Optional来…

视觉语言大模型模型介绍-CLIP学习

多模态学习领域通过结合图像和文本信息&#xff0c;为各种视觉语言任务提供了强大的支持。图像和文本的结合在人工智能领域具有重要的意义&#xff0c;它使得机器能够更全面地理解人类的交流方式。通过这种结合&#xff0c;模型能够处理包括图像描述、视觉问答、特征提取和图像…

Maya动画基础

Maya动画基础教程&#xff08;完整&#xff09;_哔哩哔哩_bilibili 第一集 动画基础设置 altv播放动画 选择撕下副本 右键---播放预览 第二集 k帧记录物体的空间信息 初始位置清零 删除历史记录 s键key帧 自动记录位置信息 删除帧&#xff0c;按住右键选择delete 按shif…

Apache subversion 编译流程

目录 1. 概述2. 依赖库简介2.1 Expat2.2 Apache apr2.3 Apache apr-iconv2.4 Apache apr-util2.5 Zlib2.6 OpenSSL2.7 Sqlite2.8 Apache Serf2.9 Apache subversion3. 编译3.1 Expat编译3.1.1 源码信息3.1.2 CMake-GUI3.1.3 编译步骤3.2 APR编译3.2.1 源码信息3.2.2 编译步骤3.…

详解c++菱形继承和多态---下

菱形继承 #include<iostream>using namespace std; class Animal { public:int m_Age; }; class Sheep : public Animal {}; class Tuo : public Animal {}; class SheepTuo : public Sheep, public Tuo {}; void test() {SheepTuo st;st.Sheep::m_Age 18;st.Tuo::m_Age…

数据结构-3.1.栈的基本概念

一.栈的定义&#xff1a; 栈和线性表的区别&#xff1a;栈只能在表尾一端进行插入或者删除的操作&#xff0c;而线性表可以在任意一个地方进行插入或者删除 二.有关栈的关键术语&#xff1a; 三.栈的基本操作&#xff1a; 1.回顾线性表的基本操作&#xff1a; 2.栈的基本操作&…