hdu 3342 Legal or Not(拓扑排序) HDOJ Monthly Contest – 2010.03.06
2015-05-05 23:49
447 查看
一道极其水的拓扑排序……但是我还是要把它发出来,原因很简单,连错12次……
题意也很裸,前面的废话不用看,直接看输入
输入n, m表示从0到n-1共n个人,有m组关系
截下来m组,每组输入a, b表示a指向b,或者b指向a也行。
输入n == 0时结束
如果可以拓扑排序,输出"YES",否则输出"NO"。每组输出占一行。
给两种代码吧,一种用邻接矩阵,另一种我也不知道叫什么好……
邻接矩阵——
不知名——
知道名字了,叫前向星标……
题意也很裸,前面的废话不用看,直接看输入
输入n, m表示从0到n-1共n个人,有m组关系
截下来m组,每组输入a, b表示a指向b,或者b指向a也行。
输入n == 0时结束
如果可以拓扑排序,输出"YES",否则输出"NO"。每组输出占一行。
给两种代码吧,一种用邻接矩阵,另一种我也不知道叫什么好……
邻接矩阵——
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <queue> using namespace std; const int N = 110; int mp ; int n, m; int a, b; int dg ; int main() { //freopen("test.txt", "r", stdin); while(~scanf("%d%d", &n, &m) && n) { memset(dg, 0, sizeof(dg)); memset(mp, 0, sizeof(mp)); for(int i = 0; i < m; i++) { scanf("%d%d", &a, &b); if(mp[a][b] == 0 && a != b) { dg[b]++; mp[a][b] = 1; } } queue<int> que; for(int i = 0; i < n; i++) { if(!dg[i]) que.push(i); } int sum = 0; while(!que.empty()) { int p = que.front(); que.pop(); sum++; dg[p]--; for(int i = 0; i < n; i++) { if(mp[p][i]) { dg[i]--; if(!dg[i]) { que.push(i); } } } } if(sum == n) printf("YES\n"); else printf("NO\n"); } return 0; }
不知名——
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <queue> using namespace std; const int N = 110; struct Node { int to; int next; }node ; int head ; int dg ; int n, m; int a, b; int main() { //freopen("test.txt", "r", stdin); while(~scanf("%d%d", &n, &m) && n) { memset(head, -1, sizeof(head)); memset(dg, 0, sizeof(dg)); for(int i = 0; i < m; i++) { scanf("%d%d", &a, &b); node[i].to = b; node[i].next = head[a]; head[a] = i; dg[b]++; } int sum = 0; queue<int>que; for(int i = 0; i < n; i++) { if(!dg[i]) { que.push(i); } } while(!que.empty()) { int p = que.front(); que.pop(); dg[p]--; sum++; for(int i = head[p]; i != -1; i = node[i].next) { int v = node[i].to; dg[v]--; if(!dg[v]) { que.push(v); } } } if(sum == n) printf("YES\n"); else printf("NO\n"); } return 0; }
知道名字了,叫前向星标……
相关文章推荐
- hdu 3342 Legal or Not(拓扑排序)
- 拓扑排序 HDU 3342 Legal or Not
- HDOJ 3342 Legal or Not(拓扑排序)
- hdu 3342 Legal or Not(拓扑排序dfs)
- hdu 3342 Legal or Not(拓扑排序)
- hdu 3342 Legal or Not(拓扑排序)
- HDU 3342 Legal or Not【拓扑排序】
- Hdu 3342 Legal or not(基于邻接表的BFS+队列的拓扑排序)
- HDU 3342 Legal or Not(拓扑排序)
- hdu 3342 Legal or Not(拓扑排序)
- 【拓扑排序】 HDOJ 3342 Legal or Not
- HDU 3342 Legal or Not (拓扑排序)
- HDOJ 3342 Legal or Not (拓扑排序)
- HDU 3342 Legal or Not(拓扑排序)
- hdoj 3342 Legal or Not 【拓扑排序 判断是否存在可行解】
- HDU 3342 Legal or Not (拓扑排序)
- hdoj 3342 Legal or Not【拓扑排序】
- HDU 3342 Legal or Not(简单拓扑排序判定)
- HDOJ--3342--Legal or Not(拓扑排序)
- HDOJ 3342 Legal or Not (拓扑排序)