Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda
此题需要手动开栈:
int size=<<; //256MB
char *p=(char*)malloc(size)+size;
__asm__("movl %0, %%esp\n" :: "r"(p));
还需要卡评测机←十分的神
卡了30多次评测机终于屈服了,一开始我盲目乱提交,总是T,后来上网找了一下解决卡常数方法,如下:
没错,从那之后我提交就在程序最后加// orz ...,把人差不多都%了个遍,但都是90分,%charge时只是80分,但当我%马神(Godder)时成功AC!所以以后被卡常时就%%Godder,说不定就能AC。OI隐藏技能
以下是我的ACcode,重点在倒数第二行,保我AC的那一行
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define for1(i,a,n) for(int i=(a);i<=(n);++i)
#define for2(i,a,n) for(int i=(a);i<(n);++i)
#define for3(i,a,n) for(int i=(a);i>=(n);--i)
#define for4(i,a,n) for(int i=(a);i>(n);--i)
inline const int max(const int &a,const int &b){return a>b?a:b;}
inline const int min(const int &a,const int &b){return a<b?a:b;}
const int N=;
struct charge{
int nxt,to;
}e[N<<];
int cnt=,point[N],r[N],sr[N],et[N],f[N][];
long long M,g[N][];
void read(int &sum)
{
char c=getchar();sum=;
while (c<''||c>'') c=getchar();
while (''<=c&&c<='') sum=sum*+c-,c=getchar();
}
void insect(int x,int y){e[++cnt].nxt=point[x];point[x]=cnt;e[cnt].to=y;}
void dp(int x,int fa)
{
long long tp; int mx,j,sz=;
g[x][]=;
for (int i=point[x];i;i=e[i].nxt) if (e[i].to!=fa)
{
j=e[i].to;
dp(j,x); tp=;
mx=max(f[j][],f[j][]); f[x][]+=mx;
if (f[j][]==mx) tp=g[j][];
if (f[j][]==mx) tp+=g[j][];
g[x][]=(g[x][]*tp)%M;
}
for (int i=point[x];i;i=e[i].nxt)
if (e[i].to!=fa) et[++sz]=e[i].to;
r[sz+]=; sr[sz+]=;
for3 (i,sz,)
{
mx=max(f[et[i]][],f[et[i]][]);
r[i]=r[i+]+mx;
tp=;
if (f[et[i]][]==mx) tp=g[et[i]][];
if (f[et[i]][]==mx) tp+=g[et[i]][];
sr[i]=(sr[i+]*tp)%M;
}
long long sl=; int l=;
for1 (i,,sz)
{
mx=l+r[i+]+f[et[i]][]+;
if (mx>f[x][])
{
f[x][]=mx;
g[x][]=((sl*sr[i+])%M*g[et[i]][])%M;
}
else if (mx==f[x][])
g[x][]=(g[x][]+(((sl*sr[i+])%M*g[et[i]][])%M))%M;
mx=max(f[et[i]][],f[et[i]][]);
l+=mx; tp=;
if (f[et[i]][]==mx) tp=g[et[i]][];
if (f[et[i]][]==mx) tp+=g[et[i]][];
sl=(sl*tp)%M;
}
}
void outit()
{
int mx=max(f[][],f[][]),ans=;
if (mx==f[][]) ans=g[][];
if (mx==f[][]) ans+=g[][];
printf("%d\n%lld\n",mx,ans%M);
}
int main()
{
int size=<<; //256MB
char *p=(char*)malloc(size)+size;
__asm__("movl %0, %%esp\n" :: "r"(p));
memset(point,,sizeof(point));
memset(f,,sizeof(f));
memset(g,,sizeof(g));
int n,i,x,y;
read(n);
for2 (i,,n)
{
read(x); read(y);
insect(x,y); insect(y,x);
}
scanf("%lld\n",&M);
dp(,-);
outit();
return ;
// orz Godder
}
然后就行了。
Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda的更多相关文章
- 【vijos】1770 大内密探(树形dp+计数)
https://vijos.org/p/1770 不重不漏地设计状态才能正确的计数QAQ 虽然可能最优化是正确的,但是不能保证状态不相交就是作死.... 之前设的状态错了... 应该设 f[i][0] ...
- BZOJ_4033_[HAOI2015]树上染色_树形DP
BZOJ_4033_[HAOI2015]树上染色_树形DP Description 有一棵点数为N的树,树边有边权.给你一个在0~N之内的正整数K,你要在这棵树中选择K个点,将其染成黑色,并 将其他的 ...
- 2021.07.17 P3177 树上染色(树形DP)
2021.07.17 P3177 树上染色(树形DP) [P3177 HAOI2015]树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 重点: 1.dp思想是需要什么,维护 ...
- 【vijos】1892 树上的最大匹配(树形dp+计数)
https://vijos.org/p/1892 这个必须得卡评测机+手动开栈才能卡过QAQ 手动开栈我百度的... int size=256<<20; //256MB char *p=( ...
- Vijos p1770 大内密探 树形DP+计数
4天终于做出来了,没错我就是这么蒟蒻.教训还是很多的. 建议大家以后编树形DP不要用记忆化搜索,回溯转移状态个人感觉更有条理性. 大神题解传送门 by iwtwiioi 我的题解大家可以看注释&quo ...
- 树上的等差数列 [树形dp]
树上的等差数列 题目描述 给定一棵包含 \(N\) 个节点的无根树,节点编号 \(1\to N\) .其中每个节点都具有一个权值,第 \(i\) 个节点的权值是 \(A_i\) . 小 \(Hi\) ...
- [vijos 1642]班长的任务 [树形dp]
背景 十八居士的毕业典礼(1) 描述 福州时代中学2009届十班同学毕业了,于是班长PRT开始筹办毕业晚会,但是由于条件有限,可能每个同学不能都去,但每个人都有一个权值,PRT希望来的同学们的权值总和 ...
- 【BZOJ4033】[HAOI2015] 树上染色(树形DP)
点此看题面 大致题意: 给你一棵点数为N的带权树,要你在这棵树中选择K个点染成黑色,并将其他的N-K个点染成白色.要求你求出黑点两两之间的距离加上白点两两之间距离的和的最大值. 树形\(DP\) 这道 ...
- Codeforces Round #277 (Div. 2)D(树形DP计数类)
D. Valid Sets time limit per test 1 second memory limit per test 256 megabytes input standard input ...
随机推荐
- 微信公众号开发之LBS
百度地图Web服务api:http://lbsyun.baidu.com/index.php?title=webapi 1.测距 Route Matrix API v2.0:http://lbsyun ...
- UESTC 912 树上的距离 --LCA+RMQ+树状数组
1.易知,树上两点的距离dis[u][v] = D[u]+D[v]-2*D[lca(u,v)] (D为节点到根节点的距离) 2.某条边<u,v>权值一旦改变,将会影响所有以v为根的子树上的 ...
- 2014 Super Training #6 H Edward's Cola Plan --排序+二分
原题: ZOJ 3676 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3676 题意:给每个朋友一瓶可乐,可乐有普通和高 ...
- AC日记——积木大赛 洛谷 P1969
题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...
- WWW压缩解压缩
unity的WWW参考文档:http://game.ceeger.com/Script/WWW/WWW.html 在unity中把资源打包成Assetbundle其实把资源通过 LZMA 压缩成二进制 ...
- HTML5之应用缓存---manifest---缓存使用----HTML5的manifest缓存
相信来查这一类问题的都是遇到问题或者是初学者吧! 没关系相信你认真看过之后就会知道明白的 这是HTML5新加的特性 HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连 ...
- java 14 - 8 DateFormat
A.有时候在网站注册账号时,会有日期选项,下面会有一个小型的日历可供选择.这个日期其实是个String类, 选择了日期之后,这个String类会通过程序,转换为Date类,再存入数据库中. B.反之, ...
- sqlzoo.net刷题4
SELECT name, continent FROM world a WHERE population > ( FROM world b WHERE a.continent = b.conti ...
- 补鞋匠---Cobbler 服务器自动搭建
Cobbler 服务器自动搭建http://tshare365.com/archives/439.html
- Dottrace跟踪代码执行时间
当自己程序遇到性能问题,比如请求反应缓慢,怎么分析是哪里出了问题呢?dottrace可以帮助.net程序跟踪出代码里每个方法的执行时间,这样让我们更清晰的看出是哪里执行时间过长,然后再分析应该怎样解决 ...