## Problem A 题意: 题解: C++版本一 ## Problem B 题意: 题解: C++版本一 ## Problem C 题意: 题解: C++版本一 ## Problem D 题意: 题解: C++版本一 ## Problem E 题意: 题解: C++版本一 ## Problem
#include using namespace std; int pre[1010]; bool t[1010];//t 用于标记独立块的根结点 int find(int x)//查找根节点 { int r=x; while(pre[r]!=r) r=pre[r];//返回根节点 r int i=x,j; while(pre[i...
题目大意: 每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少头 牛被所有的牛认为是受欢迎的。 先用tarjan求出每个强连通分量,再缩点
一个公园中有 n 个景点,景点之间通过无向的道路来连接(明显的点双 ),如果至少两个环公用一条路,路上的游客就会发生冲突;如果一条路不属于任何的环,这条路就没必要修 问,有多少路不必修,有多少路会发生冲突 每一个连通块中,如果边数大于点数,这个块中所有的边全部是冲突边。 所有桥为不需要修建的路。 点
刘汝佳 #include<cstdio> #include<cstring> #include<vector> #include<algorithm> #include<queue> using namespace std; #define INF 1e8 const int maxn = 200+
#include<stdio.h> #include<iostream> #include<queue> using namespace std; #define N 205 #define INF 99999999 int n,m,map[N][N]; int visited[N],dis[N];
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const int INF=0x3f3f3f3f; const int N=210; int n,m,s,t; int map[N][N],dis[N
void Add(int u,double cost,int v)//邻接表存储关系 { w[top] = cost; Key[top] = v; next[top] = head[u]; head[u] = top++; } bool SPFA(int x) { memset(vis,false,
1.gcd 2.扩展gcd )extend great common divisor 3.求a关于m的乘法逆元 补充:求逆元还可以用 ans=abmodm=(amod(m⋅b))/bans=abmodm=(amod(m⋅b))/b 4.快速幂quick power ll func(ll a,ll b
Cornfields Time Limit: 1000MS Memory Limit: 30000K Total Submissions:8623 Accepted: 4100 Description FJ has decided to grow his own corn hybrid in ord
题意:删去m个数,使剩下的数组成的数最小 题解 :贪心 , RMQ RMQ解法,建st表找,用rmq找最小值的下标,注意点 ,因为最小值是区间最右最小值,所以应该改成 <= 而不是< 且rmq查询也要同步 #include<iostream> #include<cstdio> #include<st
输入挂(更新)
祖传头文件(更新)
近期学了一些新算法,并查集,最短路,线段树,树状数组,最小生成树,KMP,简单DP。 暂时就对以上这些算法进行总结与复习。 一、并查集 并查集是最简单的一种算法。 主要用于合并,查找。 基本代码 How Many Tables 最短路Dijkstra dj是来记录从s出发到每一点的最短路 spfa判
预处理 二维数组 map[N][N];用来记录两点是否可以链接 一维数组 link[N];用来记录有哪个点占用了哪个点 一维数组 ok[N];判断点是否被用过 bool dfs(int a) { for(int i=0;i<N;i++)遍历后数组寻找有是否可以相连的 { 如果 没有相连并且没有被用过
map m; //分解质因数 //k为1或-1 void fun(int n, int k) { for (int i = 2; i 1) { m[n] += k; } } //大数快速幂取模 LL quick_pow(LL a, LL b) { LL ret = 1; while (b) { if ...
POJ 3207 C++代码一 C++代码二 点击
// tarjan算法求无向图的桥、边双连通分量并缩点 #include #include #include #include #include using namespace std; const int SIZE = 100010; int head[SIZE], ver[SIZE * 2], Next[SIZE * 2]; int dfn[SIZE], low[SIZE], c[SIZ...
// Tarjan算法求有向图强连通分量并缩点 #include #include #include #include #include #include using namespace std; const int N = 100010, M = 1000010; // int ver[M], Next[M], head[N], dfn[N], low[N]; int stack[N], ...
题意 有一个 n*n 的图,. 代表空白区域,X 代表墙,现在要在空白区域放置结点,要求同一行同一列只能放一个,除非有墙阻隔,问最多能放多少个点 思路 只有在墙的阻隔情况下,才会出现一行/列出现多个点的情况,那么可以考虑进行缩点,将同一行且没有墙体阻隔的区域缩成一个点,放到左点集中,将同一列且没有墙
题目 给到一个矩阵,有些格子上是草,有些是水。需要用宽度为1,长度任意的若干块木板覆盖所有的水,并不能覆盖草,木板可以交叉,但只能横竖放置,问最少要多少块板。 分析 经典的矩阵二分图构图和最小点覆盖。无非就是两种方向,横向和竖向。我们把水块连续的编成同一号,那么对于一个点,它会有一个横向编号和纵向编
2-sat一个变量两种状态符合条件的状态建边找强连通,两两成立1 - n 为第一状态(n + 1) - (n + n) 为第二状态 例题模板 链接一 POJ 3207 Ikki's Story IV - Panda's Trick(2-sat) 链接二 Katu Puzzle POJ - 3678
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号