NOIP2016-DAY1 简单题解?

虽然没考今年的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)(滚动数组优化)
不知道有没有错

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值