题目链接

题意: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. Python入门学习笔记

    了解 一下Python中的基本语法,发现挺不适应的,例如变量经常想去指定类型或者if加个括号之类的.这是在MOOC中学习到的知识中一点简单的笔记. Python的变量和数据类型: 1.Python这种 ...

  2. google 地图层级和对应关系

    google 地图层级和对应关系

  3. ACM题目————小A的计算器

    Description 以往的操作系统内部的数据表示都是二进制方式,小A新写了一个操作系统,系统内部的数据表示为26进制,其中0-25分别由a-z表示.  现在小A要在这个操作系统上实现一个计算器,这 ...

  4. mysql一些常用命令总结

    mysql时间戳转日期格式SELECT FROM_UNIXTIME(add_time,'%Y-%m-%d %H:%i:%s') FROM `wh5_username` where id=23; 按in ...

  5. U3D刚体测试2(ForceMode,AddForce,RelativeAddForce)

    摘自圣典的一段翻译: ForceAdd a continuous force to the rigidbody, using its mass.添加一个可持续力到刚体,使用它的质量.Accelerat ...

  6. Unity ScriptableObject的使用

    ScriptableObject主要实现对象序列化的保存,因为是Unity自己的序列化,所以比xml,json序列化方便很多,但相对可控性也比较差 1.Editor下写入和读取测试: using Un ...

  7. ZendStudio调试配置(XDebug)

    服务器配置:WAMP Sever 3.0.0 调试器环境:Zend Studio 12.0 Build ID: 12.0.0.v20141117-20141115-2331-278 License:  ...

  8. Linux用户应知应会的7个‘ls’命令的独特技巧

    在前面我们系列报道的两篇文章中,我们已经涵盖了关于‘ls’命令的绝大多数内容.本文时‘ls命令’系列的最后一部分.如果你还没有读过该系列的其它两篇文章,你可以访问下面的链接. Linux中的15个基本 ...

  9. 【转载】跟着9张思维导图学习JavaScript

    原文:跟着9张思维导图学习JavaScript 学习的道路就是要不断的总结归纳,好记性不如烂笔头,so,下面将 po 出我收集的 9 张 JavaScript相关的思维导图(非原创). 思维导图小ti ...

  10. Java_你应该知道的26种设计模式

    四. 模板方法模式 Definition: Define the skeleton of an algorithm in an operation, deferring some steps to s ...