POJ 3660 Cow Contest
2012-07-09 08:41
204 查看
对每个结点 BFS 一遍,找出能被它打败和可以打败它的结点的总和 s ,如果 s == n-1 ,它的排名可以确定;
C++ vector 邻接表;
//
C++ vector 邻接表;
# include <cstdio> # include <iostream> # include <cstring> # include <vector> # define N 105 using namespace std; int n, m; char vis ; vector <int> pre ; vector <int> aft ; int bfs(int u, int d) { int i, ret, cx, nx, front, rear, size; int Q[1000*N]; Q[1] = u; memset(vis, 0, sizeof(vis)); vis[u] = 1; front = 1; rear = 2; ret = 0; while (front < rear) { cx = Q[front++]; size = d>0 ? aft[cx].size():pre[cx].size(); for (i = 0; i < size; ++i) { nx = d>0 ? aft[cx][i]:pre[cx][i]; if (!vis[nx]) { Q[rear++] = nx; vis[nx] = 1; ++ret; } } } return ret; } int main() { int i, cnt, u, v; while (~scanf("%d%d", &n, &m)) { for (i = 1; i <= n; ++i) { pre[i].clear(); aft[i].clear(); } for (i = 0; i < m; ++i) { scanf("%d%d", &u, &v); pre[v].push_back(u); aft[u].push_back(v); } cnt = 0; for (i = 1; i <= n; ++i) { if (bfs(i, 1)+bfs(i, -1) == n-1) ++cnt; } printf("%d\n", cnt); } return 0; }
//
相关文章推荐
- POJ 3660 Cow Contest.(Floyd,传递闭包).
- poj 3660 Cow Contest
- poj 3660 Cow Contest
- POJ-3660 cow contest(floyd求传递闭包)
- POJ 3660 Cow Contest(Floyd)
- POJ 3660 Cow Contest(Floyd 传递闭包)
- POJ 3660 Cow Contest 【floyd求传递闭包 + 思维好题】
- POJ 3660 Cow Contest (全源最短路)
- POJ-3660 Cow Contest(floyd)
- POJ-3660 Cow Contest
- POJ 3660 Cow Contest(最短路弗洛伊德预处理或者迪杰斯克拉)
- POJ 3660 Cow Contest(Floyd最短路)
- POJ - 3660 Cow Contest (floyd)
- POJ 3660 Cow Contest
- POJ 3660 Cow Contest【传递闭包】
- POJ 3660 Cow Contest
- POJ - 3660 Cow Contest (floyd变形)
- POJ 3660 Cow Contest 最短路floyd
- POJ-3660-Cow Contest
- POJ 3660 Cow Contest——flody求传递闭包