POJ 2585 | ZOJ 2193 Window Pains
2012-03-18 15:20
387 查看
类型:拓扑排序
题目:http://poj.org/problem?id=2585
来源:South Central USA 2003
思路:每个出现在最前面的数字会覆盖所有可能出现在该位置的窗口,构造有向边连向被覆盖的窗口。然后拓扑排序判断环的存在。
!!!每个窗口只能被同一窗口覆盖一次
题目:http://poj.org/problem?id=2585
来源:South Central USA 2003
思路:每个出现在最前面的数字会覆盖所有可能出现在该位置的窗口,构造有向边连向被覆盖的窗口。然后拓扑排序判断环的存在。
!!!每个窗口只能被同一窗口覆盖一次
// POJ 2585 Window Pains // ac 236K 0MS #include <iostream> #include <sstream> #include <string> #include <queue> #include <stack> #include <vector> #include <list> #include <map> #include <algorithm> #include <numeric> #include <cmath> #include <cstdio> #include <cstdlib> #include <cstring> #include <ctime> #include <set> #include <deque> #include <bitset> #include <functional> #include <utility> #include <iomanip> #include <cctype> using namespace std; #define FOR(i,a,b) for(i = (a); i < (b); ++i) #define FORE(i,a,b) for(i = (a); i <= (b); ++i) #define FORD(i,a,b) for(i = (a); i > (b); --i) #define FORDE(i,a,b) for(i = (a); i >= (b); --i) #define max(a,b) ((a) > (b)) ? (a) : (b) #define min(a,b) ((a) < (b)) ? (a) : (b) #define CLR(a,b) memset(a,b,sizeof(a)) #define PB(x) push_back(x) const int MAXN = 10000; const int MAXM = 0; const int hash_size = 25000002; const int INF = 0x7f7f7f7f; string str; bool vis[10]; int tu[10][10], ru[10]; void creat(int x, int y, int v) { if(y >= 1 && y <= 2 && x >= 1 && x <= 2 && tu[v][1] == 0) tu[v][1] = 1, ++ru[1]; if(y >= 2 && y <= 3 && x >= 1 && x <= 2 && tu[v][2] == 0) tu[v][2] = 1, ++ru[2]; if(y >= 3 && y <= 4 && x >= 1 && x <= 2 && tu[v][3] == 0) tu[v][3] = 1, ++ru[3]; if(y >= 1 && y <= 2 && x >= 2 && x <= 3 && tu[v][4] == 0) tu[v][4] = 1, ++ru[4]; if(y >= 2 && y <= 3 && x >= 2 && x <= 3 && tu[v][5] == 0) tu[v][5] = 1, ++ru[5]; if(y >= 3 && y <= 4 && x >= 2 && x <= 3 && tu[v][6] == 0) tu[v][6] = 1, ++ru[6]; if(y >= 1 && y <= 2 && x >= 3 && x <= 4 && tu[v][7] == 0) tu[v][7] = 1, ++ru[7]; if(y >= 2 && y <= 3 && x >= 3 && x <= 4 && tu[v][8] == 0) tu[v][8] = 1, ++ru[8]; if(y >= 3 && y <= 4 && x >= 3 && x <= 4 && tu[v][9] == 0) tu[v][9] = 1, ++ru[9]; } bool tupo() { int i, j, k; FORE(k, 1, 9) FORE(i, 1, 9) { if(ru[i] == 0 && !vis[i]) { FORE(j, 1, 9) { if(tu[i][j] == 1) --ru[j]; } vis[i] = true; } } FORE(i, 1, 9) if(!vis[i]) return false; return true; } int main() { int i, j, num; while(cin>>str, str != "ENDOFINPUT") { CLR(tu, 0), CLR(ru, 0); FORE(i, 1, 4) FORE(j, 1, 4) { cin>>num; creat(i, j, num); tu[num][num] = 0, --ru[num]; } cin>>str; CLR(vis, false); bool sign = tupo(); if(sign) printf("THESE WINDOWS ARE CLEAN\n"); else printf("THESE WINDOWS ARE BROKEN\n"); } return 0; }
相关文章推荐
- poj 2585,zoj 2193 Window Pains【拓扑排序思想判断图是否存在环】
- zoj 2193 poj 2585 Window Pains
- POJ 2585 zoj 2193 Window Pains
- zoj 2193 && poj 2585 Window Pains
- poj 2585 Window Pains zoj 2193
- 算法笔记之 拓扑排序 POJ 2585(Window Pains)
- POJ:2585 Window Pains(简单拓扑排序+有难度打map表)
- POJ 2585 Window Pains (拓扑排序)
- poj2585——Window Pains
- poj 2585& zoj 2193
- POJ 2585 Window Pains(拓扑排序·窗口覆盖)
- POJ 2585 Window Pains(拓扑排序判定)
- poj 2585 Window Pains (有向环)
- POJ 2585 Window Pains(窗口的颜色显示问题,拓扑排序,经典题目)
- poj 2585 Window Pains
- poj 2585 Window Pains 解题报告
- POJ 2585 Window Pains(拓扑排序)
- POJ 2585 Window Pains【拓扑】
- POJ2585_Window Pains(拓扑排序)
- poj 2585 Window Pains 拓扑排序