【DP】 HDOJ 3357 Stock Chase
2014-08-17 14:19
246 查看
传递闭包。。。不知道有没有更好的解法。。。
#include <iostream> #include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cmath> #include <time.h> #define maxn 305 #define maxm 10005 #define eps 1e-10 #define mod 998244353 #define INF 999999999 #define lowbit(x) (x&(-x)) #define mp mark_pair #define ls o<<1 #define rs o<<1 | 1 #define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R typedef long long LL; //typedef int LL; using namespace std; LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;} void scanf(int &__x){__x=0;char __ch=getchar();while(__ch==' '||__ch=='\n')__ch=getchar();while(__ch>='0'&&__ch<='9')__x=__x*10+__ch-'0',__ch = getchar();} // head int mat[maxn][maxn]; int n, m; void init(void) { memset(mat, 0, sizeof mat); } void work(int _) { int ans = 0, a, b; for(int i = 1; i <= n; i++) mat[i][i] = 1; while(m--) { //scanf("%d%d", &a, &b); scanf(a), scanf(b); if(mat[b][a]) ans++; else if(!mat[a][b]){ mat[a][b] = 1; for(int i = 1; i <= n; i++) if(mat[i][a]) for(int j = 1; j <= n; j++) if(mat[b][j]) mat[i][j] = 1; } } printf("%d. %d\n", _, ans); } int main(void) { int _ = 0; while(scanf("%d%d", &n, &m), n!=0 || m!=0) { init(); work(++_); } return 0; }
相关文章推荐
- hdoj1159 (dp 最长公共子序列)
- 【DP】 HDOJ 5282 Senior's String
- HDOJ1421 搬寝室 DP
- 【DP】 HDOJ 5185 Equation
- HDOJ 题目1074 Doing Homework(状压DP)
- HDOJ 1087 Super Jumping! Jumping! Jumping! (DP)
- HDOJ 3646 Fate Stay Night (DP)
- HDOJ 5293 Tree chain problem LCA+树链剖分+树形DP
- HDOJ 5067Harry And Dig Machine(状态压缩DP)
- HDOJ 3652 B-number (数位DP)
- hdoj 计算直线的交点数 1466 (数学+DP) 好题
- HDOJ 1398 背包DP
- HDOJ--2602--Bone Collector--dp--01背包
- hdoj1231最大连续子序列(DP)
- (DP)FatMouse's Speed --HDOJ
- hdoj 1069 Monkey and Banana 【DP】
- hdoj.5115 Dire Wolf【区间DP】 2015/08/01
- hdoj4028(离散DP)
- hdoj 1466 计算直线的交点数 【dp】
- hdoj-1078 FatMouse and Cheese(dp)