Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
解题报告树形DP 看起来是一道树形DP 其实这就是一道树形DP 但是...... 根本没考DP,纯粹是个板子 精粹全在读入~ 读入手法: 首先要明确,'#'只出现在最后 对于'#'的处理,其实只要用scanf就可以 scanf输入时的返回值有如下几类 1.当输入与格式符("%d")统一时,读入几个变量 返回值就是几 2.当输入与格式符不统一时,如用("%d"读入'#') 返回值是0 3.当读入EOF是返回值是-1 因此,对于'#',可以直接如下处理 while(scanf("%d%d",&n,&m)!=0){ } 即可 其次对于村庄名,最好用scanf("%s")去读 不会吃掉空格和回车,不建议用cin>>处理 中间用getchar()去判断空格和回车 建树的时候自然是用STL的map去建立 string(可以直接用char[]转化)和int 之间的映射(记得清空) 代码实现: map<string,int>cz; char r[205]; int l;//记录映射值 for(i=1;i<=n;i++){ scanf("%s",r); if(!cz.count(r))//首参量存在返回1,不存在返回0 cz[r]=++l;//次参量未知,find难以使用 j=cz[r]; scanf("%d",&hf[j]); while(getchar()!='\n'){ scanf("%s",r); if(!cz.count(r)) cz[r]=++l; a++; dl[a].zd=cz[r]; dl[a].lj=qd[j]; qd[j]=a; fw[cz[r]]=true;//记录是否为叶节点 } } DP部分: 实话说,除了读入,这就是道水题 倒序循环j,正序循环k,正常DP就可以啦 Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator