3686专题

zoj 3686 (a simple tree problem)

题目链接:点击打开链接 题目大意:给一棵树,节点上只有0 1,初始为0,进行operate则将此节点为根节点的子树都变为与之相反的。询问某个节点的子树1的个数。 题目分析:一看就是线段数,但是区间怎么找?所以要经过处理。参考了大神的想法http://blog.csdn.net/lenleaves/article/details/8759598。

线段树模板(lazy标记)ZOJ 3686

题解:先搜索用将树上的点给定时间戳,以此当做该节点的区间。 #include <cstdio>#include<cstring>#include<algorithm>using namespace std;#define N 150005bool vis[N], check[N];int dep, k, n;struct treeNode{int id;treeNode *bro

poj 3686 The Windy's

一开始把图建错了。结果纠结到现在。本题需要拆点,把每台机器当成n台使用。由于每台机器之前加工的玩具无法确定,但是我们可以反过来想。假设当前这个玩具倒数第K加工,那么他和后面加工的玩具总共延误K*MAP[I][J],我们就可以根据这个来建图。然后套KM算法去做。#include<stdio.h>#include<string.h>#include<iostream>using names

POJ 3686 The Windy's KM算法

这题的建图实在是太神了 假设某个机器处理了k个玩具,那么对于这些玩具,有两种时间,一种是真正处理的时间,一种是等待的时间,等待的时间就是之前所有处理的玩具的时间, 假设这k个玩具真正用在加工的时间分为a1,a2,a3...ak, 那么每个玩具实际的时间是加工的时间+等待时间,分别为 a1, a1+a2, a1+a2+a3.......a1+a2+...ak     求和之后变为 a1