题目链接

题意: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】的更多相关文章

  1. 洛谷.5284.[十二省联考2019]字符串问题(后缀自动机 拓扑 DP)

    LOJ BZOJ 洛谷 对这题无话可说,确实比较...裸... 像dls说的拿拓扑和parent树一套就能出出来了... 另外表示BZOJ Rank1 tql... 暴力的话,由每个\(A_i\)向它 ...

  2. 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 ...

  3. codeforces 721C (拓扑+dp)

    题意就是某个人去游览,起点是1点,终点是n点,他总的游览时间不能超过t,第一行给你3个数字,点的个数n,边的个数m,时间t,然后底下m行数据,每行代表一条边,边的起点,终点和权值(走过去花的时间),然 ...

  4. BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP

    BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...

  5. luogu2149 Elaxia的路线 (dijkstra+拓扑dp)

    先标记上一个人所有最短路上的边(同时也要标记反向边) 然后拿着另一个人最短路上的边(会构成一个DAG)去做拓扑dp,记从原点到某个点的最大的某个路径的被标记的边的个数 #include<bits ...

  6. UVA 11324.The Largest Clique tarjan缩点+拓扑dp

    题目链接:https://vjudge.net/problem/UVA-11324 题意:求一个有向图中结点数最大的结点集,使得该结点集中任意两个结点u和v满足:要目u可以到达v,要么v可以到达u(相 ...

  7. 小明的密码-初级DP解法

    #include #include #include using namespace std; int visited[5][20][9009];// 访问情况 int dp[5][20][9009] ...

  8. 【BZOJ-4316】小C的独立集 仙人掌DP + 最大独立集

    4316: 小C的独立集 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 57  Solved: 41[Submit][Status][Discuss] ...

  9. 湖南省第十二届大学生计算机程序设计竞赛 B 有向无环图 拓扑DP

    1804: 有向无环图 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 187  Solved: 80[Submit][Status][Web Board ...

随机推荐

  1. 工具项与菜单项实现相同的功能(DevExpress)

    1.在工具栏中添加菜单项.如下:在bar1工具栏中添加菜单项this.barButtonMenuItem(包含图标) this.bar1.LinksPersistInfo.AddRange(new D ...

  2. jqeury.base

    min.js //前台调用 var $ = function (args) { return new Base(args); } //基础库 function Base(args) { //创建一个数 ...

  3. java当中的定时器的几种使用方式

    这几天做的项目有个功能,就是定时执行一项服务,以下几种方法比较高效.不说了  直接撸代码: import java.util.Calendar; import java.util.Date; impo ...

  4. php之属性重载和方法重载

    <?php /** * * @authors Your Name (you@example.org) * @date 2016-06-13 20:40:19 * @version $Id$ */ ...

  5. Area(Pick定理POJ1256)

    Area Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5429   Accepted: 2436 Description ...

  6. Python学习笔记-Day3-python内置函数

    python内置函数 1.abs    求绝对值 2.all 判断迭代器中的所有数据是否都为true 如果可迭代的数据的所有数据都为true或可迭代的数据为空,返回True.否则返回False 3.a ...

  7. pip命令使用国内pypi镜像源加速在线安装

    参考:http://www.cnblogs.com/yudar/p/4444097.html 用easy_install和pip来安装第三方库很方便 它们的原理其实就是从Python的官方源pypi. ...

  8. WP8.1简单项目 《在线词典》

    为什么要做这个词典? 学了正则表达式要运用 增加WP开发熟练度 项目中运用了那些技术? HttpClient 正则表达式 数据绑定 详解 通过http://cn.bing.com/dict/searc ...

  9. touch 命令

    gcc 或 mmm等命令进行编译时,判断文件是否改变是根据文件的修改日期做判断的,但有些情况改变文件后,可能时间没有很快更新,导致编译不到,那么用 touch ./* 把对应目录下文件时间更新一下再编 ...

  10. 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 ...