[題解](最小生成樹)luogu_P1265】的更多相关文章

可以發現每個點經過次數恰好等於這個點的度數,所以把點權下放邊權,跑最小生成樹,原來邊權乘二在加上兩端點權,答案再加一遍起點最小點權 #include<bits/stdc++.h> #define ll long long using namespace std; ; ; int n,m; ll ans; struct node{ int u,v,w,nxt; bool operator <(const node&a)const{ return w<a.w; } }e[max…
首先考虑最小生成树的模型,唯一不同的是第二种情形. 即“三个或三个以上的城市申请修建的公路成环” 考虑该情形,因为修路的申请是申请离它最近的城市,所以上述条件实质上为 “存在三个或三个以上的城市,他们两两间的最近城市连起来成环” 而题目保证有唯一解,所以第二种不存在 double的5000*5000開不下,所以在prim時用到哪條邊算哪條邊 寫掛了調不出來所以複製了題解......…
一道好題不出所料又抄的題解 1.首先對於這張圖肯定要考慮走哪些邊不走哪些邊,發現我們想要的肯定那些邊權最大的邊,所以想到最大生成樹 這樣能保證選到盡量大的邊 2.跑完最大生成樹后每兩點之間就有唯一路徑了,想要知道兩點間最小邊權,可以在LCA過程中求出(我竟然不會LCA),對lca做些許改動 #include<bits/stdc++.h> using namespace std; ; ; struct node1{ int u,v,w; }e1[maxm]; struct node2{ int…
前言:[數據刪除] 來源:題解 不發題面了 首先我们来分析题目,“每个垃圾都可以用来吃或堆放”,浓浓的透露出一个背包气息.我们可以类比背包问题的放或不放.于是dp[i][j]dp[i][j]dp[i][j]描述为处理前i个物品的某状态j,那么状态j代表什么呢? 我们可以继续分析题目并使用排除法 分析题目,我们需要求的答案是时间,于是很自然而然的想到j描述高度或生命,而dp数组存放时间.很显然,这样状态既不完整,也写不出转移方程.而且dp数组存的是当前状态下最大或最小的价值,似乎也不满足. 这时候…
區間dp 题目描述 某一村庄在一条路线上安装了n盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少).老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯. 为了给村里节省电费,老张记录下了每盏路灯的位置和功率,他每次关灯时也都是尽快地去关,但是老张不知道怎样去关灯才能够最节省电.他每天都是在天亮时首先关掉自己所处位置的路灯,然后可以向左也可以向右去关灯.开始他以为先算一下左边路灯的总功率再算一下右边路灯的总功率,然后选择先关掉功率大的一边,再回过头来…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4883 [题目大意] 在一个n*m的棋盘上要放置若干个守卫. 对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说, 每列必须恰好放置一个纵向守卫.每个位置放置守卫的代价是不一样的, 且每个位置最多只能放置一个守卫,一个守卫不能同时兼顾行列的防御. 请计算控制整个棋盘的最小代价. [题解] 我们将每行和每列看成一个点,用每个格子上的点的权值作为边, 这就构成了一个n+m个点的图…
尺取法a掉 然而數學解法為 等差數列求和公式: sum(L,R)=(L+R)(R-L+1)/2=M 即(L+R)(R-L+1)=2M 可以把2M分解成两个数之积,假设分成了两个数K1,K2,且K1<K2时, 可以列一个二元一次方程组 R-L+1=K1 L+R=K2 解得L=(K2-K1+1)/2, R=(K1+K2-1)/2 当K1,K2一奇一偶时,L,R才有自然数解. 不过有一种特殊情况,就是L=R的情况,这种情况是不允许的 即(K2-K1+1)/2≠(K1+K2-1)/2,解得K1≠1 尺取…
P1917 -- 探险 时间限制:1000MS      内存限制:131072KB 题目描述(explore.cpp) π+e去遗迹探险,遗迹里有 N 个宝箱,有的装满了珠宝,有的装着废品. π+e手上有 n+e的地图,所以他知道每一个宝箱的价值,但是他不喜欢走回头路,所以要按顺序拿这 N 个宝箱中的若干个. 但是拿宝箱很累的.一开始 π+e的体力是 1, 每得到一个宝箱之后, π+e得到的价值是体力 × 宝箱的价值,之后他的体力就会变为原来的 k倍 (0<k<1). π+e 不喜欢连续放过…
果然又抄的題解... 顯然答案具有單調性,而對于平均數計算的式子我們移一下項, 若s[l..r]>mid*(r-l+1)无解, 於是我們把每個數都減去一個mid,看和的正負即可,如果為正就可能有更大的平均數, 求子串和最大值可以用單調隊列維護, #include<bits/stdc++.h> using namespace std; ; int n,s,t; double a[maxn],sum[maxn]; int b[maxn],q[maxn]; bool check(double…
好久以前抄的題解,現在重新抄題解做一下 1.對所有木棍從大到小排序,後用小的比較靈活 2.限制加入的木棍單調遞減,因為先/后用長/短木棍等價,反正就是那兩根 3.預處理出重複木棍的位置,防止重複搜索相同的木棍 4.二分查找下一根小於等於未拼木棍長度的木棍 5.因為是從小到大枚舉原木棍長度,所以第一次找到可行解就是最優的,直接停止 6.如果當前選擇木棍長度等於當前未拼木棍的長度,並且繼續搜索失敗時,就不再搜了 因為如果不用這根拼的話必然要拿更小的幾根木棍拼好當前未拼的長度, 而晚用長木棍早用短木棍…
一道好題,然而看題解做的...... floyed的實質:只經過前k個點i到j的最短路,原狀態轉移方程為 f [ k ] [ i ] [ j ]=min( f[ k-1 ] [ i ] [ j ],f[ k-1 ] [ i ] [ k ]+f [ k-1 ] [ k ] [ j ] ) 這樣壓掉一維就變成了我們熟悉的樣子 而這題發現這裡的k剛好很符合題中時間這一要求,即時間不超過k時的最短路,而題中給的詢問t又是有序的(無序也可以排序) 所以就每次就用這個點的時間去更新一遍所有點的最短路,即可達…
來源:題解 一開始看不懂題目,一萬年了終於看懂 f [ i ] [ j ] 表示第i朵花放在第j個花瓶中最大美學值,(花是必須用完嗎?) 顯然放i-1朵花至少要放到前i-1個瓶子里,最多放到前j-1個瓶子里(因為這個要放到第j個瓶子) 所以就遍歷一下 (i-1,j-1)這個區間轉移一下 f [ i ] [ j ]=max( f [ i ] [ j ] , f [ i-1 ] [ k ]+w[ i ] [ j ] ) ( i-1<=k<=j-1 ) 輸出方案只要選擇 g [ i ] [ j ]記…
來源:題解 不發題面 因為 l 範圍太大,而石子數卻很少,步數也僅僅在1~10之間, 也就是說兩個石子之間很有可能間隔很大的距離,不管怎麼跳都能跳過去,那麼中間那些怎麼樣都能跳過去的區間和沒有等價, 所以讀入后就更新一遍pos和vis數組,範圍就可以縮到比較小, 至於具體多大的區間可以刪掉,可以取1~10的最小公倍數2520,(小凱的疑惑)71,(t * t-1)90,甚至可以 %t 再 +t,好像都可以 大概是一個離散化的方法吧 #include<iostream> #include<…
前言:基本上發題解的都是抄的題解所以 來源:題解 题目描述 为了在即将到来的晚会上有更好的演出效果,作为AAA合唱队负责人的小A需要将合唱队的人根据他们的身高排出一个队形.假定合唱队一共N个人,第i个人的身高为Hi米(1000<=Hi<=2000),并已知任何两个人的身高都不同.假定最终排出的队形是A 个人站成一排,为了简化问题,小A想出了如下排队的方式:他让所有的人先按任意顺序站成一个初始队形,然后从左到右按以下原则依次将每个人插入最终棑排出的队形中: -第一个人直接插入空的当前队形中. -…
[题解]BZOJ4883: [Lydsy1705月赛]棋盘上的守卫(最小生成基环森林) 神题 我的想法是,每行每列都要有匹配且一个点只能匹配一个,于是就把格点和每行每列建点出来做一个最小生成树,但是不幸的是,这样子无法控制一个点是否选择多次,并且无法控制那些不需要变成守卫的点的情况 然后我看了题解.. 一个元素的两种状态可以对应上一条边的方向,现在问题就变成了要选出一些边使得所有点的入度为1.也就是一个外向基环森林,直接类似克鲁斯卡尔做就行了. 这貌似可以抽象成一种模型,也就是有待选点,匹配点,…
看到最大的最小值應該想到二分答案,這樣就解決了最小點權的問題,判血量就很好說,直接比較就行, 一個點是二分點權數組,複製一份然後排序,二分下標,速度較快 這麼簡單的題我竟然寫了這麼長時間 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> #define ll long long using namespace std;…
1.prim算法:一种计算生成最小生成树的方法,它的每一步都会为一棵生长中的树添加一条边. 2.时间复杂度:…
题意:动物要逃跑,工作人员要截断从START(左上角)到END(右下角)的道路,每条边权表示拦截该条道路需要多少工作人员.问最少需要多少人才能完成拦截. 通俗地讲,就是把图一分为二所造成消耗的最小值. 这里用最短路的方法解,主要是因为数据量太大,不能用最小割最大流还处理. 手动画一下这种“割”的形式,发现是从一条边到另一条边,即以边为“点”,在边与边之间见“边”,边上的权值为终点v(其实是一条边)的权值.(本来想直接用点权处理的,可coding的时候发现SPFA中的入队出队操作太繁琐,老老实实改…
清明講過一道類似的,難度略大的:P3545 [POI2012]HUR-Warehouse Store 兩道題類似,都是暫時先把前面的加進候選集合里,如果超出限制的話就拿現在這個和前面的交換, 相當於不選前面那個選當前這個,應該是比較好的思想 這道題還有一個就是如果最優解要你走到那個點,那麼中間的路程是不可省略的,所以貪心時大可不考慮 反正實質上是個dp,取的是最大值 #include<bits/stdc++.h> #define ll long long using namespace std…
是一道歐拉路的題竟然沒看出來...... 把每種顏色看成一個點,每根木棍看成一個邊,即相同顏色在圖中接好合併成了一個點, 問題轉化為了求是否存在歐拉路 如果用map會超時,所以可以用字典樹實現離散化/哈希,unordered_map需要c++11 注意判斷圖是否聯通,用并查集即可 #include<iostream> #include<cstdio> #include<cstring> #include<unordered_map> using namesp…
//匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using namespace std; #define MAX 105 #define INF 0x3f3f3f3f int n,m,k; int gp[MAX][MAX]; bool sx[MAX],s…
函数的四要素:函数名.输入.输出(返回).加工. 函数分为两种:一种是有返回值得函数,一种是没有返回值的函数. 1. 定义:没有返回值的函数:(当我不需要函数的计算结果再拿出来进行运算的时候,我就不需要有返回值,直接在函数中运算完成加工即可) static void 函数名(参数){ 函数体 } 调用:调用没有返回值的函数: 函数名(实际参数): 在函数中的参数叫做虚参,我们需要给他一个实际的参数才能完成整个运算流程. 例如:我要打印一两个数字的和? public class HS { publ…
  Qt Assistant 这个exe文件可以被我们利用到我们自己的程序为我们添加help,是一个文档浏览器,它的搜索功能,还有最主要的就是他可以让客户自己定义自己索要显示的文档,也就是qch文档.当然我们要给他写好给他,显示那个文档就看他自己了, 1.qhp 与qch.qhp是Qt Help Project的缩写,qch是Qt Compressed Help的缩写.qch就是html的压缩文件,你把很多的html压缩了,之后压缩成qch. 2.qhcp是Qt Help Collection…
通常一个纹理映射的步骤是: 创建纹理对象.就是获得一个新的纹理句柄 ID. 指定纹理.就是将数据赋值给 ID 的纹理对象,在这一步,图像数据正式加载到了 ID 的纹理对象中. 设定过滤器.定义了opengl现实图像的效果,如纹理放大时的马赛克消除. 绑定纹理对象.就是将 ID 的纹理作为下面操作的纹理. 纹理映射.将已绑定纹理的数据绘制到屏幕上去,在这一步,就能看到贴图的效果了. 一.opengl 中启用纹理映射功能 在默认设置中,纹理映射是关闭的,启用的参数是 GLTEXTURE2D, 还有其…
https://docs.lvrui.io/2018/09/28/%E8%AF%A6%E8%A7%A3kubeadm%E7%94%9F%E6%88%90%E7%9A%84%E8%AF%81%E4%B9%A6/ 学了很多次,这次,这个BLOG,算是讲得比较清楚了.. 准备升级证书罗 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~· 如果你使用过kubeadm部署过Kubernetes的环境, master主机节点上就一定会在相应的目录创建了一大…
链接6081 度度熊的王国战略 Time Limit: 40000/20000 MS (Java/Others) Memory Limit: 32768/132768 K (Java/Others) Total Submission(s): 923 Accepted Submission(s): 352 Problem Description 度度熊国王率领着喵哈哈族的勇士,准备进攻哗啦啦族. 哗啦啦族是一个强悍的民族,里面有充满智慧的谋士,拥有无穷力量的战士. 所以这一场战争,将会十分艰难.…
搜索剪枝, 1.枚舉上下界: 先$R\subset$$(dep,min(\lfloor\sqrt{n-v}\rfloor,lastr-1))$ 后$H\subset$$(dep,min((n-v)/R^{2},lasth-1))$ 由$\pi R^{2}H=\pi(n-v)$可以推出來,R那裡沒有除H是因為H最小為1 2.優化搜索順序:倒序以減小枚舉規模,應該會更快 3.不太複雜的預估(可行性剪枝 預處理出$1$~$dep-1$層的最小體積前綴和,最小側面積前綴和,每次加一下和$n.ans$比較…
被入門難度的題虐...... 作者: kkksc03 吉祥物 更新时间: 2013-07-14 19:00 在Ta的博客查看    78   By lzn 数论水题一道. 首先,若可能的最大公约数为a,取出的k个数为X1,X2,……,Xk且满足X1<X2<……<Xk,那么有X1>=a,X2>=2a,……,Xk>=ka.又∵Xk<=n,∴n>=ka,∴a<=n/k,又∵a为整数,∴a<=[n/k]([]为取整符号). 另一方面,我们取[n/k],2…
兩個都是一次函數,下取整就是整點個數,兩個函數k剛好成倒數,所以最後發現會組合成一個矩形 (為啥要考慮重複與否的問題???) 然而這樣會不會重複計算點數呢 我們發現因為取的是圖像下的整數點 所以要想重複算必須有整點的交集 然而pq互質,函數值不會有整數,把兩個函數圖像旋轉拼合以後可以發現不會重複算 但是當p和q相等的時候就會有交集了,這樣把對角線上重複算的去掉, ((p-1)/2)((p-1)/2)是矩形中的点数,后面是重复的点(有((p-1)/2)((p-1)/2)个点就有(p-1)/2)个点…
對於不嚴格單調的我們可以n^2DP,首先每個數一定在原數組中出現過,如果沒出現過不如減小到出現過的那個花費更小,效果相同 所以f[i][j]表示把i改到離散化后j的最小代價,每次維護前一狀態最小值mn再加上這次的值就是答案 圖像沒看懂:https://blog.csdn.net/lycheng1215/article/details/80089004 #include<bits/stdc++.h> #define ll long long using namespace std; ; ; in…