搜索
andyc_03
这个作者很懒,什么都没留下…
展开
-
【树的直径】P4381 [IOI2008]Island
给出一个基环树森林,求每一棵基环树的最大直径 首先用dfs找到树上的环,然后去计算环上的/环外的路径最大长度即可 也就是一个树形dp的过程,需要一个队列优化 代码 #include<bits/stdc++.h> using namespace std; const int maxn=1e6+5; int n,tot,l,que[maxn],tim,id[maxn],vis[maxn],fa[maxn],mark[maxn],times,inin[maxn],dep[maxn..原创 2020-09-22 23:20:04 · 121 阅读 · 0 评论 -
【搜索】P1985 [USACO07OPEN]翻转棋
考虑每个黑色位置是否被反过来,是由上一行的这个位置决定的,所以我们可以先全排类枚举出第一行的情况,然后每一行按照上一张的情况反转即可,做完最后一行的时候,检查一下是否都变成了白色即可 代码 #include<bits/stdc++.h> using namespace std; const int inf=INT_MAX; int n,m,a[20][20],d[20][20],ans,f[20],b[20][20],c[20][20]; void rev(int x,int y) .原创 2020-09-14 22:32:15 · 224 阅读 · 0 评论 -
【最短路+记忆化搜索】P3953 逛公园
首先,可以通过spfa求出最短路以及dis[i](表示1-i的最短路),然后考虑可以多走的距离为k,那么我们就可以枚举这一条边是否能被走,如果这条边连接i和j,那么就可以算出走这条边比原来最短路多走的距离为边权G[i].v-(d[i]-d[j]),然后就可以进行记忆化搜索,求总的方案 tips:这道题由于数组较大、T组数较多,用memset初始化会T两个点 代码 #include<bits/stdc++.h> using namespace std; int t,n,m,k,p; .原创 2020-07-22 21:10:44 · 132 阅读 · 0 评论