传送门:https://www.acwing.com/solution/content/82014/ 分析 假如没有染色顺序的约束,那么最佳决策当然是先染权值大的点(本质上就是排序不等式)。 然而现在它有约束,但我们可以保证的一点是:当树上最大的点 \(u\) 的父节点 \(p\) 被染色的时候,立刻将 \(u\) 进行染色是最优的:这意味着,
CF1244D Paint the Tree 洛谷链接 思路: 这道题的翻译害人不浅,我一直以为是三个节点都相同才不能选,结果看了看英文题面,是三个中两两互不相同。 那么根据抽屉原理,当点 i 的入度 $in_i \ge 3$ 的时候,无论怎么取,四个点必有两个相同,无解。 若有解,则必然满足 $in_i \le 2(i \in [1,n])
图的前向星表示1 时间限制:1秒 内存限制:128M 题目描述 给定一个有向图的信息,按照前插法的方式输出每个节点的邻接点。 输入描述 第一行,两个整数n,m(1 <= n,m <= 10^5),n表示图的节点的个数,m表示图中的边数。 接下来m行,每行两个整数x,y,表示x能够直接到达y。 输出描述 输
SELECT Upper(F.TABLESPACE_NAME) "TablespaceName", D.TOT_GROOTTE_MB "Total(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES "Used(M)", To_char(Round(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE
最近项目中遇见了ORA-01654的问题。。 原因就是IND_SHOP_TRADES_RECORD_TID 所在的表空间TS_IDX_WF大小不够了。 首先查询各个表空间的大小和使用率:SELECT Upper(F.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GR
Content 给出一名学生的语数英三门成绩,请判断该名学生是否恰好有一门不及格(成绩小于 \(60\) 分)。 数据范围:成绩在 \(0\sim 100\) 之间。 Solution 强烈建议先去做 B2019。 这道题目和 B2019 有什么关系呢?没错!我们想着把这个“成绩小于 \(60\) 分”当做是一个数值,因为如果“成绩小
Problem 给定一张有向图,每条边都有一个容量\(C\)和一个扩容费用\(W\)。这里扩容费用是指将容量扩大\(1\)所需的费用。求: 1.在不扩容的情况下,\(1\)到\(N\)的最大流; 2.将\(1\)到\(N\)的最大流增加\(K\)所需的最小扩容费用。 Solution 第一问显然很好求,但第二问怎么处理呢? 将最大流增
1 #include<bits/stdc++.h> 2 using namespace std; 3 string t[100]; 4 int tot=0; 5 int to_num(string &s) 6 { 7 int x=0,f=1; 8 for(auto &p:s) 9 { 10 if(p=='-')f=-1; 11 else x=x*10+(p^48); 12 }
适用场合 多次询问在一个图中,两个点之间的最短路上的最长边。 这个题有多种解法,用 K r u s k a
链表 1. 前言 C/C++自带的数据结构-数组很好用,但是无法在任意位置插入或删除元素,所以我们就需要另外一种数据结构来实现这种操作,于是链表就诞生了,链表支持在任意位置插入或删除,但只能按顺序依次访问其中的元素。我们可以用一个 struct 表示链表的节点,其中可以储存任意数据,然后我
题目描述: 题目传送门 解题思路: 根据题意可得这道题就是在一棵树上选择若干个点,使得点权最大,其中选点满足两个条件: 选了父节点就不能选子节点选了子节点就不能选父节点 显然,题目的当务之急是如何在程序中存储一棵树,或者说存储一张图,这时候通俗的邻接矩阵就在空间上出现了缺陷
#include<bits/stdc++.h> using namespace std; #define maxn 20 int n,x,y,tot; int a[maxn][maxn]; int main(){ scanf("%d",&n); tot=a[x=0][y=n-1]=1; //把tot计数变量与1的位置都先变成1 while (tot < n*n){ while(x+1<n&
题目描述: 贝尔顿小镇有 n n n个交汇点和 m m m条双向道路,一个人可以凭借现有的通道从一个点到达另一
思路 首先考虑贪心,按 \(f\) 进行从小到大排序。特别的,当 \(f\) 相等时,就按价格进行排序。 然后我们就可以用类似 01 背包的方法,为了方便,我们可以将计算机的价格置为负数。定义状态 \(dp_j\) 表示内核数为 \(j\) 时所得的最大利润。背包容量即为所购买的计算机内核的总和 \(tot\)。
2021.11.18-NOIP模拟信心赛 前言 太蒟蒻了,信心赛打的都快没信心了,giao T1\(\color{green}100\)题目 T1作为简单的签到题,直接先枚举所有的流量再用dijkstra跑这么多遍就可以了 #include<bits/stdc++.h> #define M 2100 #define N 1100 #define inf 0x7f7f7f7f using namespace std;
题目链接:https://codeforces.com/contest/1582/problem/F1 真的是菜的可以,容易想到ai<=500就是有个对512的遍历操作,但是怎么实现却一筹莫展。就一句话,dp[j]表示异或和结果为j的得到该结构的所有递增序列中最小的末尾值。 #include <bits/stdc++.h> using namespace std; usi
A A.M. Deviation 在三元组\(a_1,a_2,a_3\)上定义d运算:\(d=|a_1+a_3-2a_2|\). 可以做任意多次如下操作: 选择\(a_1,a_2,a_3\)中两个数,将其分别+1和-1. 对于给定的\(a_1,a_2,a_3\) ,最小化\(d\) 的值. 容易发现结果只可能是0/1,只与和有关. #include<iostream> #include<cstdio> us
题面 给一棵边带权的树,求一条路径使得路径上所有边的异或最大. 容易发现abb=a,所以可以将两条重合的异或路径合并而不影响结果.考虑求出从根节点到每个节点的异或值,将这些值放进0/1trie树里,从高位贪心即可. 注意:根据讨论结果,还是将初始tot和now赋成1比较好,并且中间变量要取
思路: 直接暴力都可以过 c o d e code code #include<iostream> #include<cstdio> using namespace std;
Link. Codeforces Luogu Description. 给一个初始为空的整点集, 现在有 \(n\) 次操作 向点集中插入点 \((x,y)\) 从点集中删除点 \((x,y)\) 问至少需添加多少点满足图像关于 \((0,0)\) 和 \((x,y)\) 连成的直线对称 每次询问并没有把点加入点集中,每个询问是独立的。 Solution.
做了好久... 最后调出来还是蛮有成就感的,总结一个博客出来吧2333 要求 一些细节 中文字符的处理 在头文件之后写: #ifdef _WIN32 #include<windows.h>//用来修控制台中文乱码 #endif 在main函数的最前面写: #ifdef _WIN32 SetConsoleOutputCP(65001);//用来
\(\text{Solution}\) 树上主席树板子 \(\text{Code}\) #include <cstdio> #include <algorithm> #define re register using namespace std; const int N = 1e5 + 5; int n, m, f[N][19], len, size, rt[N], a[N], b[N], c[N], tot, h[N], dep[N]; struct segmen
题目 问有多少个集合 \(S\) 是 \([1,n]\) 的子集, 并且 \(\forall a,b\in S,a|b\),满足 \(\frac{b}{a}\neq \{2,3\}\) 分析 可以发现这样所谓的独立集,不满足的关系近似于 若干个网格图 ,即 1 3 9 ... 2 6 18 ... 4 12 36 ... ... ... ... ... 也就是相邻的不能
题目链接 题意 给出一棵树,每条边有一种颜色,每种颜色都有相应的权值。一条路径的权值为:连续相同的颜色视为一段,权值为所有颜色段对应的权值和,比如路径颜色为:1 1 1 2 3 1 1 4 4,那么颜色段为:1 2 3 1 4。 求长度在 [
目录 模板直接应用费用流之二分图最有匹配最大权不相交路径网格图模型拆点费用流之上下界可行流 模板 EK #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; inline int read() { int x=0,f=1; char ch=getchar(); while(