BZOJ 3569 DZY Loves Chinese II 树上差分+线性基

2024-02-26 14:10

本文主要是介绍BZOJ 3569 DZY Loves Chinese II 树上差分+线性基,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3569

 

Description

神校XJ之学霸兮,Dzy皇考曰JC。
摄提贞于孟陬兮,惟庚寅Dzy以降。
纷Dzy既有此内美兮,又重之以修能。
遂降临于OI界,欲以神力而凌♂辱众生。
今Dzy有一魞歄图,其上有N座祭坛,又有M条膴蠁边。
时而Dzy狂WA而怒发冲冠,神力外溢,遂有K条膴蠁边灰飞烟灭。
而后俟其日A50题则又令其复原。(可视为立即复原)
然若有祭坛无法相互到达,Dzy之神力便会大减,于是欲知其是否连通。

Input

第一行N,M,接下来M行x,y:表示M条膴蠁边,依次编号;接下来一行Q,接下来Q行:每行第一个数K而后K个编号c1~cK,表示K条边,编号为c1~cK。
为了体现在线,c1~cK均需异或之前回答为连通的个数。

Output

对于每个询问输出:连通则为‘Connected’,不连通则为‘Disconnected’(不加引号)

Sample Input

5 10
2 1
3 2
4 2
5 1
5 3
4 1
4 3
5 2
3 1
5 4
5
1 1
3 7 0 3
4 0 7 4 6
2 2 7
4 5 0 2 13

Sample Output

Connected
Connected
Connected
Connected
Disconnected

HINT

N≤100000,M≤500000,Q≤50000,1≤K≤15,数据保证没有重边与自环

Tip:请学会使用搜索引擎

 

 

 

题意概述:

  给出一张图,每次假设删除图上K条边,询问图是否连通。

 

分析:

  这操作还是很厉害的......

  对于图的问题可以借助和图有关的树来分析。

  借助DFS树,我们发现当我们删除一些边的时候,只有我们把某条树边以及所有跨越它的非树边删除掉之后这个图就不连通了。

  那么我先现在需要判断给出的边中有没有这样的一些边出现。如果有,那么图就不连通,否则就依旧连通。

  怎么判断呢?想到异或,当一些线性相关的数字一起出现的时候,它们的其中一些异或和为0。对于每一条非树边,将其随机一个权值,然后对其跨越的所有边异或上它的权值。每一次询问的时候取出来求线性基,如果线性基插入过程中有数字变成了0,说明给出的数字不是线性不相关。

  因为K<=15,所以说可以直接用rand()函数(实在不放心可以手动随机二进制位)。

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<algorithm>
 6 #include<cmath>
 7 #include<queue>
 8 #include<set>
 9 #include<map>
10 #include<vector>
11 #include<cctype>
12 using namespace std;
13 const int maxn=100005;
14 const int maxm=500005;
15 
16 int N,M,Q;
17 struct edge{ int to,next; }E[maxm<<1];
18 int first[maxn],np,fl[maxn],delt[maxn],dfn[maxn],dfs_clock,w[maxm],vis[maxn];
19 struct Linear_Base{
20     static const int up=16;
21     int b[up];
22     void init(){ memset(b,0,sizeof(b)); }
23     bool ins(int x){
24         for(int i=up-1;i>=0;i--) if((1<<i)&x){
25             if(!b[i]) { b[i]=x; break; }
26             else x^=b[i];
27         }
28         return x!=0;
29     }
30 }lb;
31 
32 void add_edge(int u,int v)
33 {
34     E[++np]=(edge){v,first[u]};
35     first[u]=np;
36 }
37 void data_in()
38 {
39     scanf("%d%d",&N,&M);
40     int x,y;
41     for(int i=1;i<=M;i++){
42         scanf("%d%d",&x,&y);
43         add_edge(x,y); add_edge(y,x);
44     }
45     scanf("%d",&Q);
46 }
47 void DFS(int i,int fp)
48 {
49     dfn[i]=++dfs_clock,fl[i]=fp;
50     for(int p=first[i];p;p=E[p].next){
51         if(fp==(p-1^1)+1) continue;
52         int j=E[p].to;
53         if(dfn[j]){
54             if(dfn[j]<dfn[i]){
55                 w[p+1>>1]=rand()+1;
56                 delt[i]^=w[p+1>>1],delt[j]^=w[p+1>>1];
57             }
58             continue;
59         }
60         DFS(j,p);
61         w[fp+1>>1]^=w[p+1>>1];
62     }
63     w[fp+1>>1]^=delt[i];
64 }
65 void work()
66 {
67     srand(20010207);
68     DFS(1,0);
69     int k,x,cnt=0;
70     for(int i=1;i<=Q;i++){
71         scanf("%d",&k);
72         bool ok=1; lb.init();
73         for(int j=1;j<=k;j++){
74             scanf("%d",&x);
75             if(ok&&!lb.ins(w[x^cnt])) ok=0;
76         }
77         if(ok) puts("Connected"),cnt++;
78         else puts("Disconnected");
79     }
80 }
81 int main()
82 {
83     data_in();
84     work();
85     return 0;
86 }
View Code

 

转载于:https://www.cnblogs.com/KKKorange/p/8624135.html

这篇关于BZOJ 3569 DZY Loves Chinese II 树上差分+线性基的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/749126

相关文章

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

线性因子模型 - 独立分量分析(ICA)篇

序言 线性因子模型是数据分析与机器学习中的一类重要模型,它们通过引入潜变量( latent variables \text{latent variables} latent variables)来更好地表征数据。其中,独立分量分析( ICA \text{ICA} ICA)作为线性因子模型的一种,以其独特的视角和广泛的应用领域而备受关注。 ICA \text{ICA} ICA旨在将观察到的复杂信号

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

1️⃣线性回归(linear regression) f w , b ( x ) = w x + b f_{w,b}(x) = wx + b fw,b​(x)=wx+b 🎈A linear regression model predicting house prices: 如图是机器学习通过监督学习运用线性回归模型来预测房价的例子,当房屋大小为1250 f e e t 2 feet^

【高等代数笔记】线性空间(一到四)

3. 线性空间 令 K n : = { ( a 1 , a 2 , . . . , a n ) ∣ a i ∈ K , i = 1 , 2 , . . . , n } \textbf{K}^{n}:=\{(a_{1},a_{2},...,a_{n})|a_{i}\in\textbf{K},i=1,2,...,n\} Kn:={(a1​,a2​,...,an​)∣ai​∈K,i=1,2,...,n

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],