上午
T1 燃烧火焰
比赛的时候想了两个小时没头绪,直接dfs+Dijkstra把自己送走了。
先所有特殊点做最短路,求出整体最短时间
然后每个特殊点做一遍最短路,求出每个特殊点到其他点的最短时间
对于每一个点,到它的最短时间小于等于整体最短时间的特殊点一定不能被全部删去,因此每个点可以对应一个由一些特殊点组成的点集
用状压DP统计方案,具体的,设S为一种删除方案,f[S]=0/1表示 可行/不可行,初始只有上述的点集对应的方案被设为1,然后一个点一个点地加进去
除法逆元直接套公式,(a/b)%p=(a*bp-2)%p
完整代码戳这里
下午
T1 染色研究
比赛时爆20pts,赛后一看,Tarjan怎么跟别人写的不一样
if(low[u]==dfn[u]){
++tot;
while(top) bk[sta[top--]]=tot,size[tot]++;
}
错误的
if(low[u]==dfn[u]){
++tot;
do size[tot]+=val[sta[top]],bk[sta[top]]=tot;
while(u!=sta[top--]);
}
正确的
T2 抢掠计划
把DAG当树做了。活该爆蛋。
DAG上做DP,拓扑序值得信赖