嗯,总之,是我太傻了。

我真傻,真的,我单知道最小生成树,却不知道还有最大生成树

T1

最大生成树....

累加每一个环内,最大生成树的边权,(对环求最大生成树,则必然剩下一个边权最小的边(因为是求生成树,所以这个边肯定不会被算上))

然后因为对于不同联通块,跑最大生成树,彼此之间依旧无法有想连接的边,所以对于森林跑最大生成树是没有问题的

最后所有边的边权和 减去 所有联通块的最大生成树的边权和 即可得到答案

最小生成树性质之一:最大边权最小

最大生成树性质之一:最小边权最大

最后是吐槽:我写了4kb的dfs,疯狂地dfs,使用各种奇奇怪怪的操作,并且计算的复杂度是允许的!最后好不容易调过了样例

最后因为数组开的太大,直接MLE,连正确性都不知道....

AC代码如下:

 #include<bits/stdc++.h>
#define uint unsigned int
using namespace std;
const int maxn = ;
const int maxm = ;
struct shiki {
int x, y;
double val;
}e[maxm << ];
struct enkidu {
int x, y;
}a[maxn];
int lin[maxn], len = ;
int fa[maxn];
double num, need;
int n, m; inline int read() {
int x = , y = ;
char ch = getchar();
while(!isdigit(ch)) {
if(ch == '-') y =-;
ch = getchar();
}
while(isdigit(ch)) {
x = (x << ) + (x << ) + ch - '';
ch = getchar();
}
return x * y;
} inline bool cmp(shiki x, shiki y) {
return x.val > y.val;} inline double dis_val(int x, int y) {
int x1 = a[x].x, y1 = a[x].y, x2 = a[y].x, y2 = a[y].y;
return (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2);
} int getfather(int x) {
if(x == fa[x]) return x;
return fa[x] = getfather(fa[x]);
} int main() {
// freopen("plan.in", "r", stdin);
// freopen("plan.out", "w", stdout);
n = read(), m = read();
for(register uint i = ; i <= n; ++i)
a[i].x = read(), a[i].y = read();
for(register uint i = ; i <= m; ++i) {
e[i].x = read(), e[i].y = read();
e[i].val = dis_val(e[i].x, e[i].y);
}
for(register uint i = ; i <= n; ++i) fa[i] = i;
sort(e + , e + m + , cmp);
for(register uint i = ; i <= m; ++i) {
int u = getfather(e[i].x);
int v = getfather(e[i].y);
num += sqrt(e[i].val);
if(u == v) continue;
fa[u] = v;
need += sqrt(e[i].val);
}
printf("%0.9lf", num - need);
// fclose(stdin);
// fclose(stdout);
return ;
}

T2

我T1为了完成sb的4kb的超暴力搜索,花费了差不多2个小时的时间,然后看到这道题后,我一眼以为是一个博弈论...

然后我又想了想,觉得自己的题意好像出锅了....

然后就按照贪心思想完成了一个dfs,最后贪心顺利骗到10分...

Dp
题意:
最优策略指:差值最大

因为我们在某个位置选或是不选由[i+1, i+m]中的状态推导来的,也就是说,我们要保证下一个人取得是最优策略。

但是我们正序进行的话,我们无法保证当前状态是最优策略,所以我们倒序进行

划分阶段:
以进行每个点i为阶段
f[i]表示,在当前回合,选择数ai时,所能得到的最大得分
添加状态

正常操作:
f[i][0]表示到第i个数时,该棋子为大魔王选时,你的得分减去大魔王的得分
f[i][1]表示到第i个数时,该棋子为你选时,你的得分减去大魔王的得分
f[i][0] = max{f[k][1]} - a[i]
f[i][1] = min{f[k][0]} + a[i]
也就是说要维护f[k][1]和f[k][0]在[i-m, i-1]的单调性

倒序与第一题一样

优化1:空间优化
假定第ai个数必须取,f[i]表示若选择一定选择第ai个数,当前的人和对方的最大差值
因为每个人都取最优策略,所以选择第ai个数我们能够得到的分数是
f[i] = ai - max{f[j]}(j ∈ [i+1, i+m])
可得方程f[i] = ai - max{f[j]}(j ∈ [i+1, i+m])

因为f[j]是对方的最大差值,我们选择了a[i],则我们要计算自己的得分,就要用a[i] - max{f[j]}

优化2:时间优化:
(1)单调队列维护单调性:好写,代码量小
(2)线段树取区间最大值,正常操作,显然

 #include<bits/stdc++.h>
#define uint unsigned int
#define ll long long
using namespace std;
const int maxn = ;
int q[maxn];
int f[maxn];
int n, m;
int a[maxn];
int l = , r = ;
int ans = -; inline int read() {
int x = , y = ;
char ch = getchar();
while(!isdigit(ch)) {
if(ch == '-') y = -;
ch = getchar();
}
while(isdigit(ch)) {
x = (x << ) + (x << ) + ch - '';
ch = getchar();
}
return x * y;
} int main() {
// freopen("game.in", "r", stdin);
// freopen("game.out", "w", stdout);
n = read(), m = read();
for(register uint i = ; i <= n; ++i) a[i] = read();
f[n] = a[n];
q[++r] = n;
for(register uint i = n - ; i >= ; --i) {
while(l <= r && q[l] > i + m) l++;
f[i] = a[i] - f[q[l]];
while(l <= r && f[q[r]] < f[i]) r--;
q[++r] = i;
}
for(register uint i = ; i <= m; ++i)
ans = max(ans, f[i]);
cout << ans << '\n' << -ans << '\n';
// fclose(stdin);
// fclose(stdout);
return ;
}

T3

不得不说,样例就是sb,我最初以为是只能从根节点出发

然后我就写了个树Dp的暴力,然后就爆0了

后来才知道,是求的直径.....

暴力思路:

对于每一次询问,都手动封点,求树的直径

能拿50%的分

正解思路:不会,回来补吧....

20180824Noip模拟赛10分总结的更多相关文章

  1. NOIP2017提高组模拟赛 10 (总结)

    NOIP2017提高组模拟赛 10 (总结) 第一题 机密信息 FJ有个很奇怪的习惯,他把他所有的机密信息都存放在一个叫机密盘的磁盘分区里,然而这个机密盘中却没有一个文件,那他是怎么存放信息呢?聪明的 ...

  2. [NOIP2018模拟赛10.16]手残报告

    [NOIP2018模拟赛10.16]手残报告 闲扯 炉石乱斗模式美滋滋啊,又颓到好晚... 上来T2先敲了树剖,看T1发现是个思博DP,然后没过大样例,写个暴力发现还是没过大样例!?才发现理解错题意了 ...

  3. [NOIP2018模拟赛10.23]发呆报告

    闲扯 考场看了眼题目感觉很难,一个小时敲完了所有暴力...嗯然后就在那里发呆什么事也没做 T3考场上把数据结构想了个遍都不会完成1操作,现在看这种思路其实之前也接触过... 比较玄学的一件事情就是T1 ...

  4. [NOIP2018模拟赛10.18]自闭报告

    闲扯 这一天,菜鸡RyeCatcher又想起来了被毒瘤题支配的恐惧 今天比较好玩,还是ljy提醒才发现文件夹里有题面...不知道外面的人什么时候才发现 看完了题面,又回到了雅礼啥题也不会写的感觉 T1 ...

  5. [NOIP2018模拟赛10.25]瞎搞报告

    闲扯 最近有点颓,都修到好晚,早上起来和吔shi一样难受 忍着困意把题面看完,发现啥也不会,又是一场写暴力的模拟赛 T1发现似乎可以DP,顺手码了个 T2像个最小瓶颈路板子,但是只做过N^2算法的.. ...

  6. [NOIP2018模拟赛10.20A]挂分报告

    闲扯 先看看了B组,T1 ZROI刚好讲过一个性质原根一般很小的,直接枚举;T2一眼二分然后似乎状压 T3没看 然后上来A组题,T1 flow这名字...网络流?! T1题面非常的社会主义核心价值观, ...

  7. 【noip模拟赛10】奇怪的贸易 高精度

    描述 刚结束了CS战斗的小D又进入了EVE的游戏世界,在游戏中小D是一名商人,每天要做的事情就是在这里买东西,再运到那里去卖.这次小D来到了陌生的X星,X星上有n种货物,小D决定每种都买走一些,他用a ...

  8. 清北学堂模拟赛d2t6 分糖果(candy)

    题目描述总共有n颗糖果,有3个小朋友分别叫做L,Y,K.每个小朋友想拿到至少k颗糖果,但这三个小朋友有一个共同的特点:对3反感.也就是说,如果某个小朋友拿到3颗,13颗,31颗,333颗这样数量的糖果 ...

  9. [NOIP2018模拟赛10.22]咕咕报告

    闲扯 这是篇咕咕了的博客 考场上码完暴力后不知道干什么,然后忽然发现这个T1好像有点像一道雅礼集训时讲过的CF题目 Rest In Shades ,当时那道题还想了挺久不过思路比较妙,于是我就也\(y ...

随机推荐

  1. P1368 工艺

    题目描述 小敏和小燕是一对好朋友. 他们正在玩一种神奇的游戏,叫Minecraft. 他们现在要做一个由方块构成的长条工艺品.但是方块现在是乱的,而且由于机器的要求,他们只能做到把这个工艺品最左边的方 ...

  2. 洛谷 P2801 教主的魔法 解题报告

    P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...

  3. recycleview的基础Adapter

    .封装了一个基础的adapter.,用于recycleview的快捷使用有BaseAdapter,BaseViewHolder,PAdapter,MainActivity public abstrac ...

  4. P2765 魔术球问题(网络流24题)

    题目描述 «问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为1,2,3,...的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全 ...

  5. codeforces902C. Hashing Trees

    https://codeforces.com/contest/902/problem/C 题意: 给你树的深度和树的每个节点的深度,问你是否有重构,如果有重构输出两个不同的结构 题解: 如果相邻节点的 ...

  6. 迅雷Bolt的ClipSubBindBitmap函数特别说明

    因为在工作中基于迅雷Bolt开发的是IM产品,需要实现自定义用户头像的功能. 但Bolt中对图像的默认拉伸锯齿效果非常明显,所以自己实现了图像拉伸函数,代码已共享,具体可查看:<迅雷Bolt图像 ...

  7. sperman系数

    https://baike.baidu.com/item/spearman%E7%9B%B8%E5%85%B3%E7%B3%BB%E6%95%B0/7977847?fr=aladdin https:/ ...

  8. jsonp应用

    1.服务端jsonp格式数据 如客户想访问 : http://www.runoob.com/try/ajax/jsonp.php?jsonp=callbackFunction. 假设客户期望返回JSO ...

  9. 【BZOJ2818】Gcd [莫比乌斯反演]

    Gcd Time Limit: 10 Sec  Memory Limit: 256 MB[Submit][Status][Discuss] Description 给定整数N,求1<=x,y&l ...

  10. bzoj 2749 杂题

    我们可以发现,phi(x)与x相比,相当于x的每个质因子-1后再分解质因数,添加到现有的质因子中,比如质因子13相当于将13变成12,然后分解成2*2*3,再将2的质数+2,3的指数+1,除了质因子2 ...