摘要:
代码如下 cpp include using namespace std; const int maxn=1e5+10; int n,a[maxn],b[maxn],cnt[10],mx; void read_and_parse(){ scanf("%d",&n); for(int i=1;i=1; 阅读全文
摘要:
题目大意:给定一棵 N 个节点的内向树森林,求该内向树森林的最小环的大小(按边计算)。 题解:先删链,再计算环的大小,统计答案即可。 代码如下 cpp include using namespace std; const int maxn=2e5+10; int n,ans,to[maxn],ind 阅读全文
摘要:
题目大意:给定一个 N 个节点的内向树森林,求从每个顶点出发能够到达的最多不重复顶点的个数是多少。 题解:内向树森林是由一个或若干个环加若干条链构成。可以先按照类似于拓扑排序的规则进行删链,再对环上的点计算答案,最后计算链上的答案即可。 代码如下 cpp include using namespac 阅读全文
摘要:
题目大意:给定 n 个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有 n+1 个字母的字符串使得每个字母对都在这个字符串中出现。 题解:每个无需字母对可以看成无向图中的一条边。因此,题目中让构造的就是一个欧拉路(路径或回路均可),即:无向图中的每条边恰好经过一 阅读全文
摘要:
题目大意:给定一个有 N 个点,N 条边且每个点的出度均为 1 的有向图,求该有向图的一个最小环。 题解:由于每个点的出度均为 1,可知可能的情况只有以下几种:一个环或多个环,一个环+一条链。因此,可以采用 Tarjan 缩点,求出每个强连通分量,更新答案贡献。另外,学到了一种并查集做法,由于每条边 阅读全文
摘要:
题目大意:给一 $n \times n$ 的字母方阵,内可能蕴含多个 $“yizhong”$ 单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着 8 个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉,因此有可能共用字母。输出时,将不是单词的字母用 代替,以突出显示单词。 题解 阅读全文
摘要:
题目大意:给定一个 N 个点无向图的一棵生成树和另外 M 条边,第一次去掉生成树中的一条边,第二次去掉另外 M 条边中的一条边,求有多少种情况可以使得给定的无向图不连通。 题解:首先考虑该生成树,若新增加一条边,则会在树上形成一个环,这时若删除的树边在环上,则只有将环切断才能使得图不连通;若删除的树 阅读全文
摘要:
代码如下 cpp include using namespace std; const int maxn=5e5+10; inline int read(){ int x=0,f=1;char ch; do{ch=getchar();if(ch==' ')f= 1;}while(!isdigit(c 阅读全文
摘要:
题目大意:给定一个字符串和一个字符串集合,问从集合中选出若干个串组成给定母串的不同方案数。 题解:有些类似于背包问题。状态很好表示,为:$dp[i]$ 表示母串前 i 个字符的不同方案数,因此,有状态转移方程为:$$dp[i]=\sum dp[j],s[j+1...i]=s_0,s_0\in set 阅读全文
摘要:
题目大意:需要维护一种数据结构,支持以下三种操作:插入一个数,删除一个数,查询该数据结构中的数异或给定数的最大值。 题解:如果没有删除操作就是一个标准的 Trie 上贪心求最大异或和问题。现在需要支持删除操作,因此,在树上每个节点维护一个额外的标记,表示 有多少个数的某一位经过当前节点 。插入操作依 阅读全文