hiho#14

军训去了没有打,回来看题跑。

T1:hehe

注意X可能是实数233

#include<cstdio>
#include<cctype>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=next[i])
using namespace std;
inline int read() {
    int x=0,f=1;char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1;
    for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
    return x*f;
}
const int maxn=55;
int A[maxn],t[maxn];
int main() {
    int n=read(),ans=0;
    char s[15];
    rep(i,1,n) {
        scanf("%s",s);scanf("%s",s);
        A[i]=read()<<1;
        if(s[0]==‘<‘&&s[1]==‘=‘) t[i]=1;
        else if(s[0]==‘<‘) t[i]=2;
        else if(s[0]==‘=‘) t[i]=3;
        else if(s[0]==‘>‘&&s[1]==‘=‘) t[i]=4;
        else t[i]=5;
    }
    rep(x,-1,2001) {
        int res=0;
        rep(i,1,n) {
            if(t[i]==1&&x<=A[i]) res++;
            if(t[i]==2&&x<A[i]) res++;
            if(t[i]==3&&x==A[i]) res++;
            if(t[i]==4&&x>=A[i]) res++;
            if(t[i]==5&&x>A[i]) res++;
        }
        ans=max(ans,res);
    }
    printf("%d\n",ans);
    return 0;
}

T2:其实是让你求出Max(depx+fy+1|y不是x的祖先),其中depx表示x的深度,fy表示y到子树中最深的节点的距离。

#include<cstdio>
#include<cctype>
#include<queue>
#include<stack>
#include<cstring>
#include<algorithm>
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define dwn(i,s,t) for(int i=s;i>=t;i--)
#define ren for(int i=first[x];i;i=Next[i])
using namespace std;
inline int read() {
    int x=0,f=1;char c=getchar();
    for(;!isdigit(c);c=getchar()) if(c==‘-‘) f=-1;
    for(;isdigit(c);c=getchar()) x=x*10+c-‘0‘;
    return x*f;
}
const int maxn=100010;
int n,ans,first[maxn],to[maxn],Next[maxn],e,f[maxn],mx=-1<<30;
void AddEdge(int v,int u) {to[++e]=v;Next[e]=first[u];first[u]=e;}
void solve(int x,int dep) {
    ren solve(to[i],dep+1),f[x]=max(f[x],f[to[i]]+1);
    ans=max(ans,dep+mx+1);mx=max(mx,f[x]);
}
int main() {
    int n=read();
    rep(i,2,n) AddEdge(read(),read());
    solve(1,0);printf("%d\n",ans);
    return 0;
}

T3:我不做计算几何

T4:妈妈啊

时间: 2024-08-04 19:34:56

hiho#14的相关文章

[hiho 14]并查集

题目描述 并查集,顾名思义有两个操作:合并和查询. 并就是把两个集合合并到一起. 查就是查询两个节点是否属于同一个集合. 每个节点有一个父节点.一个集合内存在一个唯一的根,判断根的条件就是节点的父节点是不是该节点本身. 合并操作就是把一个集合的根接到另一个集合的根上. 而查询操作就是找两个对象是否有同一个根. 查询过程中可以顺便进行路径压缩以优化后续查询:即让查找路径上所有节点的父节点直接等于根节点. #include <iostream> #include <algorithm>

hiho一下 第二十九周 最小生成树三&#183;堆优化的Prim算法【14年寒假弄了好长时间没搞懂的prim优化:prim算法+堆优化 】

题目1 : 最小生成树三·堆优化的Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 回到两个星期之前,在成功的使用Kruscal算法解决了问题之后,小Ho产生了一个疑问,究竟这样的算法在稀疏图上比Prim优化之处在哪里呢? 提示:没有无缘无故的优化! 输入 每个测试点(输入文件)有且仅有一组测试数据. 在一组测试数据中: 第1行为2个整数N.M,表示小Hi拥有的城市数量和小Hi筛选出路线的条数. 接下来的M行,每行描述一条路线,其中第i行为3个整数N1_

【hiho】14 无间道之并查集【图论--并查集】

传送门:无间道之并查集 分析 并查集的分析可以看上面的传送门,写的挺好的了. 其实在我看来并查集就是一种方便的维护集合的一种技巧,提出了代表元素这一概念. My AC Code #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; const int maxn=1e5+5; int represent[maxn]; int find_represent(int x) {

hiho一下 第二十一周(线段树 离散化)

知识点1:离散化  对于这些区间来说,其实并不会在乎具体数值是多少,而是在他们的左右端点之间互相进行比较而已.所以你就把这N个区间的左右端点——2N个整数提出来,处理一下呗?你要注意的是,这2N个数是什么其实并不重要,你可以把这2N个数替换成为任何另外2N个数,只要他们之间的相对大小关系不发生改变就可以.” 解决方法: 那么我需要额外做的事情就是在构建线段树之前对区间进行预处理:将区间的左右端点选出来,组成一个集合,然后将这个集合依次对应到正整数集合上,并且利用这个对应将原来的区间的左右端点更换

圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point

1 // 圆内,求离圆心最远的整数点 hiho一下第111周 Farthest Point 2 // 思路:直接暴力绝对T 3 // 先确定x范围,每个x范围内,离圆心最远的点一定是y轴两端的点.枚举x的范围,再比较y 4 // O(n) 5 6 #include <bits/stdc++.h> 7 using namespace std; 8 #define LL long long 9 const double inf = 123456789012345.0; 10 const LL MO

hiho 第二周

Trie树,第一次写,简单的建树+搜索 它的思路hiho上讲得很清楚,good~ 1 #include<iostream> 2 #include<string> 3 using namespace std; 4 char word[11]; 5 int n,m; 6 struct trie 7 { 8 int num; 9 trie *next[26]; 10 trie() 11 { 12 num = 0; 13 for(int i = 0; i < 26; i++) 14

hiho #1032: 最长回文子串

#1032 : 最长回文子串 时间限制:1000ms 单点时限:1000ms 内存限制:64MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在编程的学习道路上一同前进. 这一天,他们遇到了一连串的字符串,于是小Hi就向小Ho提出了那个经典的问题:“小Ho,你能不能分别在这些字符串中找到它们每一个的最长回文子串呢?” 小Ho奇怪的问道:“什么叫做最长回文子串呢?” 小Hi回答道:“一个字符串中连续的一段就是这个字符串的子串,而回文串指的是1

hiho欧拉路径(自留)

无向图 因为DFS本身就是一个入栈出栈的过程,所以我们直接利用DFS的性质来实现栈,其伪代码如下: DFS(u): While (u存在未被删除的边e(u,v)) 删除边e(u,v) DFS(v) End PathSize ← PathSize + 1 Path[ PathSize ] ← u 1 /** 2 2015.6.14 3 hiho一下 第五十周 4 欧拉路求路径 5 */ 6 7 #include<algorithm> 8 #include<iostream> 9 #i

hiho #1283 hiho密码

#1283 : hiho密码 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho根据最近在密码学课上学习到的知识,开发出了一款hiho密码,这款密码的秘钥是这样生成的:对于一种有N个字母的语言,选择一个长度为M的单词:将组成这个单词的所有字母按照顺序不重复的写出(即遇到相同字母时跳过):然后将字母表剩下的没有使用过的字母按照顺序在其后进行排列. 如对于有5个字母的hiho语,选择单词1, 2, 2, 4, 3(此处数字表示字母在字母表中的顺序),则秘钥为1,2,