虽然没考今年的noip,但不妨碍我写今年题解啊。
第一题:
模拟
第二题:
直接查找每一个节点i的相邻wi的节点j,查看j中是否有出发点经过i。
这只是我采用的写法的一个时间复杂度相同的算法,用lca判断是否通过,时间复杂度为O(nlognlogn)
对一个二十万的数据两秒的时间肯定不会超。
实际上用dfs来查找,设s与t的lca为g,将s->t拆成s->g和t->g(两种情况分开判断),用一个大桶装着所有的查询,回溯式的在桶里++–就行了。
实际上我也不知道最后这算法会变成什么样子。
第三题:
FLOYD+DP
水题一道
先用FLOYD把所有的最短路全算出来
一开始我把n当成教室数量想着最短路都不知道这题怎么做,后来发现教室最多300个
然后就DP了
f[i][j][k]表示第i节课用了j次调课且k表示是否这次调课成功(0没调课,1成功,2失败)能得到的最低值。
有
f[i][j][0]=min(f[i-1][j][0]+d(x1,x2),(1-ki-1)*(f[i-1][j][2]+d(x1,x2))+ki-1*(f[i-1][j][1]+d(x3,x2))
f[i][j][1]=min(f[i-1][j-1][0]+d(x1,x4),(1-ki-1)*(f[i-1][j-1][2]+d(x1,x4))+ki-1*(f[i-1][j-1][1]+d(x3,x4))
f[i][j][2]=min(f[i-1][j-1][0]+d(x1,x2),(1-ki-1)*(f[i-1][j-1][2]+d(x1,x2))+ki-1*(f[i-1][j-1][1]+d(x3,x2))
时间复杂度为O(3nm),空间复杂度为O(1)(滚动数组优化)
不知道有没有错
NOIP2016-DAY1 简单题解?
最新推荐文章于 2024-07-19 15:45:46 发布