CSU 1802 小X的战斗力【拓扑dp】
题意:n个人,每个人有一个能力值。给出m组关系A, B, 表示A的能力值大于B的能力值。
问:m组关系中是否有自相矛盾的?若不矛盾,问:第1个人在所有人的能力值中排名第几?有多少人的能力值的排名可以确定?
题解:拓扑排序。存两个图,原图与反图。
若原图可达该点数+反图可达该点数-1 = n,则排名确定。
bitset一下。
#include <bits/stdc++.h>
using namespace std;
#define X first
#define Y second
#define pii pair<int, int>
#define mp make_pair
typedef long long ll; vector<int> ve[], rve[];
int in[], rin[];
bitset<> dp[], rdp[];
int ra[], rra[];
int topsort(int n, int* in, vector<int>* ve, bitset<>* dp, int* ra){
queue<int> Q;
for(int i = ; i <= n; i++)
if(in[i] == ) Q.push(i);
int ret = ;
while(!Q.empty()){
int p = Q.front();
Q.pop();
ret++;
ra[p] = ret;
for(int i = ; i < ve[p].size(); i++){
int to = ve[p][i];
in[to]--;
dp[to] |= dp[p];
if( !in[to] ) Q.push(to);
}
}
return ret == n;
}
void debug(int n){
puts("*******************");
for(int i = ; i <= n; i++){
cout << i << endl;
cout << dp[i] << ' ' << rdp[i] << endl;
}
puts("********end********");
}
int main(){
int t; scanf("%d", &t);
while(t--){
int n, m, u, v;
scanf("%d%d", &n, &m);
for(int i = ; i <= n; i++){
ve[i].clear();
rve[i].clear();
in[i] = rin[i] = ;
ra[i] = rra[i] = ;
dp[i].reset(), rdp[i].reset();
dp[i][i-] = rdp[i][i-] = ;
}
for(int i = ; i < m; i++){
scanf("%d%d", &u, &v);
ve[u].push_back(v);
in[v]++;
rve[v].push_back(u);
rin[u]++;
} if( !topsort(n, in, ve, dp, ra) )//有向图有环
puts("Wrong");
else{
topsort(n, rin, rve, rdp, rra);
//前面有 dp[i]-1 个, 后面有 rdp[i]-1 个;
printf("%d\n", dp[].count()+rdp[].count()- == n? ra[]:-);
int sum = ;
for(int i = ; i <= n; i++)
if(dp[i].count()+rdp[i].count()- == n) sum++;
printf("%d\n", sum);
}
}
return ;
}
另解:floyd
CSU 1802 小X的战斗力【拓扑dp】的更多相关文章
- 洛谷.5284.[十二省联考2019]字符串问题(后缀自动机 拓扑 DP)
LOJ BZOJ 洛谷 对这题无话可说,确实比较...裸... 像dls说的拿拓扑和parent树一套就能出出来了... 另外表示BZOJ Rank1 tql... 暴力的话,由每个\(A_i\)向它 ...
- Codeforces Round #374 (Div. 2) A , B , C 水,水,拓扑dp
A. One-dimensional Japanese Crossword time limit per test 1 second memory limit per test 256 megabyt ...
- codeforces 721C (拓扑+dp)
题意就是某个人去游览,起点是1点,终点是n点,他总的游览时间不能超过t,第一行给你3个数字,点的个数n,边的个数m,时间t,然后底下m行数据,每行代表一条边,边的起点,终点和权值(走过去花的时间),然 ...
- BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP
BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...
- luogu2149 Elaxia的路线 (dijkstra+拓扑dp)
先标记上一个人所有最短路上的边(同时也要标记反向边) 然后拿着另一个人最短路上的边(会构成一个DAG)去做拓扑dp,记从原点到某个点的最大的某个路径的被标记的边的个数 #include<bits ...
- UVA 11324.The Largest Clique tarjan缩点+拓扑dp
题目链接:https://vjudge.net/problem/UVA-11324 题意:求一个有向图中结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要目u可以到达v,要么v可以到达u(相 ...
- 小明的密码-初级DP解法
#include #include #include using namespace std; int visited[5][20][9009];// 访问情况 int dp[5][20][9009] ...
- 【BZOJ-4316】小C的独立集 仙人掌DP + 最大独立集
4316: 小C的独立集 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 57 Solved: 41[Submit][Status][Discuss] ...
- 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP
1804: 有向无环图 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 187 Solved: 80[Submit][Status][Web Board ...
随机推荐
- 工具项与菜单项实现相同的功能(DevExpress)
1.在工具栏中添加菜单项.如下:在bar1工具栏中添加菜单项this.barButtonMenuItem(包含图标) this.bar1.LinksPersistInfo.AddRange(new D ...
- jqeury.base
min.js //前台调用 var $ = function (args) { return new Base(args); } //基础库 function Base(args) { //创建一个数 ...
- java当中的定时器的几种使用方式
这几天做的项目有个功能,就是定时执行一项服务,以下几种方法比较高效.不说了 直接撸代码: import java.util.Calendar; import java.util.Date; impo ...
- php之属性重载和方法重载
<?php /** * * @authors Your Name (you@example.org) * @date 2016-06-13 20:40:19 * @version $Id$ */ ...
- Area(Pick定理POJ1256)
Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 5429 Accepted: 2436 Description ...
- Python学习笔记-Day3-python内置函数
python内置函数 1.abs 求绝对值 2.all 判断迭代器中的所有数据是否都为true 如果可迭代的数据的所有数据都为true或可迭代的数据为空,返回True.否则返回False 3.a ...
- pip命令使用国内pypi镜像源加速在线安装
参考:http://www.cnblogs.com/yudar/p/4444097.html 用easy_install和pip来安装第三方库很方便 它们的原理其实就是从Python的官方源pypi. ...
- WP8.1简单项目 《在线词典》
为什么要做这个词典? 学了正则表达式要运用 增加WP开发熟练度 项目中运用了那些技术? HttpClient 正则表达式 数据绑定 详解 通过http://cn.bing.com/dict/searc ...
- touch 命令
gcc 或 mmm等命令进行编译时,判断文件是否改变是根据文件的修改日期做判断的,但有些情况改变文件后,可能时间没有很快更新,导致编译不到,那么用 touch ./* 把对应目录下文件时间更新一下再编 ...
- Codeforces Round #372 (Div. 2) C
Description ZS the Coder is playing a game. There is a number displayed on the screen and there are ...