常用的网站开发语言厦门市建设工程造价网站
常用的网站开发语言,厦门市建设工程造价网站,自贡做网站的公司,桐柏网站这是很久很久以前做的一道题#xff0c;可惜当时WA了一页以后放弃了。 今天我又重新捡了起来。#xff08;哈哈1A了#xff09; 题意#xff1a; 没有上司的舞会判重 思路#xff1a; hash一下树形DP 题目中给的人名hash到数字#xff0c;再进行运算。 树形DP f[x… 这是很久很久以前做的一道题可惜当时WA了一页以后放弃了。 今天我又重新捡了起来。哈哈1A了 题意 没有上司的舞会判重 思路 hash一下树形DP 题目中给的人名hash到数字再进行运算。 树形DP f[x][0]max(f[x.son][0],f[x.son][1]); f[x][1]f[x.son][0]; f[x][0]表示不选这个节点f[x][1]表示选这个节点。 如果选了这个节点那么它的儿子必定不选。 如果不选这个节点它的儿子们可选可不选 取最大的即可。 然后就是坑爹的判重。 怎么判重呢 如果n为2的话 肯定是No不用解释了吧 然后就从1到n遍历一遍 如果选这个节点和不选这个节点的人数是一样的就遍历它的儿子 如果有任何一个儿子节点选这个儿子节点和不选这个儿子节点的人数是一样的话 那么就是No 否则就是Yes // by SiriusRen
#include cstdio
#include cstring
#include algorithm
using namespace std;
int n,tot,num,first[205],v[666],next[666],Hash[1000008],jya,jyb,f[666][2];
char a[105],b[105];
void add(int x,int y){v[tot]y,next[tot]first[x],first[x]tot;}
void dfs(int x){f[x][1]1;for(int ifirst[x];~i;inext[i]){dfs(v[i]);f[x][0]max(f[v[i]][0],f[v[i]][1]);f[x][1]f[v[i]][0];}
}
int main(){st:while(scanf(%d,n)n){scanf(%s,a);jyatot0;num1;memset(first,-1,sizeof(first));memset(f,0,sizeof(f)),memset(Hash,0,sizeof(Hash));int lenstrlen(a);for(int i0;ilen;i)jya(jya*256a[i])%1000007;Hash[jya]1;for(int i1;in;i){scanf(%s%s,a,b);int lenastrlen(a),lenbstrlen(b);jyajyb0;for(int i0;ilena;i)jya(jya*256a[i])%1000007;if(!Hash[jya])Hash[jya]num;for(int i0;ilenb;i)jyb(jyb*256b[i])%1000007;if(!Hash[jyb])Hash[jyb]num;add(Hash[jyb],Hash[jya]);}if(n2){puts(1 No);goto st;}dfs(1);printf(%d ,max(f[1][0],f[1][1]));for(int i1;in;i)if(f[i][0]f[i][1])for(int jfirst[i];~j;jnext[j])if(f[v[j]][0]f[v[j]][1]){puts(No);goto st;}puts(Yes);}
} 转载于:https://www.cnblogs.com/SiriusRen/p/6532347.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/88143.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!