摘要: 树形dp;思想: 把正向边赋值为0;反向边赋值为1;然后求出点到其他点的最小距离;两次dfs:第一次是从下往上:记录每个点到所有子树中需要改变的边的条数;第二次是自上往下:由父节点求子节点到所有点的需要改变的边的条数。代码: 1 #include 2 #include 3 #include 4 #define maxn 200005 5 using namespace std; 6 7 struct node 8 { 9 int v,w;10 };11 12 vectorve[maxn];13 int dp[maxn],res;14 bool vis[maxn];15 16 void... 阅读全文
posted @ 2013-09-17 17:21 Yours1103 阅读(531) 评论(0) 推荐(0) 编辑
摘要: 树形dp题,要求求出书上的最远距离;很经典的一种树形dp;思路:最远距离要么是从老爸的最远距离+自己与老爸的距离; 要么是儿子的最远距离+自己与儿子的距离;然后比较上面两个的大小就是答案了!参考了别人的代码:两次搜索:1.第一次搜索是从下至上的搜索,找到每个节点的最远距离f[],次远距离sf[];并记录最远距离的那个点;2.第二次搜索是从上往下的搜索,找到老爸那边来的最远距离dp[];代码: 1 #include 2 #include 3 #include 4 #define maxn 10005 5 using namespace std; 6 7 struct node 8... 阅读全文
posted @ 2013-09-17 16:11 Yours1103 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 树形dp的基础题;状态转移很简单:老爸没选,儿子可选可不选,最大就行;老爸选了,儿子肯定不能选;dp[root][0]+=max(dp[son][1],dp[son][0]); dp[root][1]+=dp[son][0];代码: 1 #include 2 #include 3 #include 4 #define maxn 6003 5 using namespace std; 6 7 int w[maxn],dp[maxn][2]; 8 vectorve[maxn]; 9 bool vis[maxn];10 11 void dfs(int a)12 {13 vis... 阅读全文
posted @ 2013-09-17 09:09 Yours1103 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 一个超级超级水的题,不明白当时比赛的时候没有出来;思路很简单,dfs暴力一下就行,枚举每个顶点,题目一共才20个点,就是20^4方的时间复杂度,完全可以承受;代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 6 struct node 7 { 8 int x,y; 9 } no[22];10 bool use[22];11 int ans,num,n;12 13 void dfs(int i)14 {15 ans=max(num,ans);16 for(; i<n; i++)17 {18... 阅读全文
posted @ 2013-09-16 22:06 Yours1103 阅读(186) 评论(0) 推荐(0) 编辑
摘要: 桥的应用!虽然以前做过强联通分量的题,但刷的很水,所以比赛的时候一直想不起来是桥的应用;反省一下~~~学习一下!思路,找到权值最小的桥;用tarjin算法!代码: 1 #include 2 #include 3 #include 4 #define maxn 1003 5 using namespace std; 6 7 struct edge 8 { 9 int st,ed,w,next;10 }e[maxn*maxn*2];11 12 int head[maxn],dfn[maxn],low[maxn],nncount,best,num,dan;13 14 void addedg... 阅读全文
posted @ 2013-09-16 20:20 Yours1103 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 一个树形dp的题,又是一个涉及不深的领域 = =;不过在网上看到了大神用很巧的思路解决了这个题;大神的思路就是:从树的底部往上看:如果一棵子树拥有两个及以上的叶子节点,可以将这棵子树与大树分离,并且将子树化成一条直线;为什么这样子是最优呢?我不会证明,但我觉得这种情况可以保留最多不被删除的边;代码: 1 #pragma comment(linker,"/STACK:1024000000,1024000000") 2 #include 3 #include 4 #include 5 #include 6 #define maxn 1000005 7 using namespa 阅读全文
posted @ 2013-09-16 15:02 Yours1103 阅读(221) 评论(0) 推荐(0) 编辑
摘要: 数位dp题;也是我做的第一个数位dp的题目;感觉数位dp的模板性很强啊,思想都差不太多!有几个写的很好的参考资料:推荐一下:数位计数问题解法研究浅谈数位类统计问题我的代码: 1 #include 2 #include 3 #define maxn 16 4 #define ll long long 5 using namespace std; 6 7 int dp[maxn][5000]; 8 int d[maxn],sum; 9 10 ll dfs(int w,int he,bool flag)11 {12 if(he<0)return 0;13 if(!w)return ... 阅读全文
posted @ 2013-09-16 14:00 Yours1103 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 这两场网赛应该是我目前参加的最正规的比赛了,也感觉到了正规的比赛和平常打cf的区别了; 感觉这两场比赛的题目都很新颖,都要有一定的想头,以前刷题的时候学的那些模版基本上用不到; 第一场比赛我们那个找规律的题没出,责任在我,一开始太相信自己的主观判断了,把自己和队友都带入了歧途;导致我们错过了发现规律的机会!像这种题目,最好的办法是先暴力打表,得出一定的数据再总结规律; 第二场比赛我们第一第二题都没出,这两个题都是出的人特别多的;第一个题目的方法就是找桥,一个星期之前我就刷过联通分量,按理来说,今天我应该能够很轻松的发现题目的本质,但联通分量刷的不够认真,也没有好好的总结,脑子只有刷过... 阅读全文
posted @ 2013-09-16 05:43 Yours1103 阅读(296) 评论(4) 推荐(0) 编辑
摘要: 今天的比赛前面四个多小时没有出题,智商真是拙计;其实前面都是水题,就是想不到思路!知道最后40分钟,和小珺同志把这个计算几何的题给A了;然后小琪也马上把第3题干掉了;代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 struct point3 6 { 7 double x,y,z; 8 }; 9 10 //向量大小 11 double vlen(point3 p) 12 { 13 return sqrt(p.x*p.x+p.y*p.y+p.z*p.z); 14 } 15 16 //计... 阅读全文
posted @ 2013-09-15 18:35 Yours1103 阅读(359) 评论(0) 推荐(0) 编辑
摘要: 一道找规律的题,但今天的智商捉急,一直都想不到点子上;比赛之后和别人讨论的时候,在n=2的情况下,前面两个是aa,后面就接着很多个aababb,然后最后再判断下就行了~~~以后对于这种题还是不要太相信自己的主观了,打个表靠谱点!代码: 1 #include 2 #include 3 char pre[][10] = {"a", "ab", "aab", "aabb", "aaaba", "aaabab", "aaababb", "aaababbb 阅读全文
posted @ 2013-09-14 22:59 Yours1103 阅读(243) 评论(0) 推荐(0) 编辑