UVALive 6467 Strahler Order
来源:互联网 发布:mac u盘图标 编辑:程序博客网 时间:2024/06/05 23:42
拓扑排序
#include <cstdio>#include <cstring>#include <iostream>#include <queue>using namespace std;int const MAXN = 1010;queue<int> q;int maze[MAXN][MAXN],d[MAXN];void Clear(){ while(!q.empty()){ q.pop(); } memset(maze,0,sizeof(maze)); memset(d,0,sizeof(d));}int TopoSort(int n){ int du[MAXN],vis[MAXN]; memset(du,0,sizeof(du)); memset(vis,0,sizeof(vis)); for(int i = 1;i <= n;i++){ if(!d[i]){ du[i] = 1; q.push(i); } } while(!q.empty()){ int s = q.front(); q.pop(); if(vis[s]){ vis[s] = 0; du[s]++; } for(int i = 1;i <= n;i++){ if(!maze[s][i]) continue; if(du[s] == du[i]) vis[i] = 1;//刚开始为0 如果俩个相等代表之前 连接过一个 标号为du[s] 的 或者 >= 2 个 du[s] -1 的 if(du[s] > du[i]){ vis[i] = 0; du[i] = du[s]; } d[i]--; if(!d[i])q.push(i); } } int m = -1; for(int i = 1;i <= n;i++){ m = m > du[i]? m : du[i]; } return m;}int main(){ int t; while(~scanf("%d",&t)){ while(t--){ Clear(); int k,n,m; scanf("%d%d%d",&k,&n,&m); for(int i = 0;i < m;i++){ int u,v; scanf("%d%d",&u,&v); maze[u][v] = 1; d[v]++;//存入度 } int s = TopoSort(n); printf("%d %d\n",k,s); } } return 0;}/*11 7 81 32 36 43 43 56 75 74 7*/
0 0
- UVALive 6467 Strahler Order
- UVALive 6467 Strahler Order 拓扑排序
- UVALive 6467 Strahler Order(拓扑排序)
- uvaLive 5139 (world final 1990 - Washington) Rare Order
- UVALive 7416 Bringing Order to Disorder(搜索)
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- UVALive
- gdb调试
- Uva 305 Joseph(数学+打表)
- linux 信号
- UVA Don't Get Rooked
- 在source insight 使用 Add from list 添加文件
- UVALive 6467 Strahler Order
- windows命令提示符
- 同步和互斥的POSXI支持(互斥锁,条件变量,自旋锁)
- ASM二 存储
- Python正则表达式指南
- Failed to install .apk on device 'emulator-5554': timeout解决方法
- 【工具类】遍历扫描文件夹下所有文件并列出
- hdu 2473并查集+节点映射
- BNUOJ 34986 北京邀请赛 F题 Football on Table 几何题