[BZOJ1663] [Usaco2006 Open]赶集(spfa最长路)
2017-09-20 20:50
477 查看
按照时间t排序
如果 t[i] + map[i][j] <= t[j],就在i和j之间连一条边
然后spfa找最长路
#include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define N 401 using namespace std; int n, ans, cnt; int a , map , dis , head , to[N * 100], next[N * 100]; bool vis ; queue <int> q; struct node { int t, id; }p ; inline int read() { int x = 0, f = 1; char ch = getchar(); for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -1; for(; isdigit(ch); ch = getchar()) x = (x << 1) + (x << 3) + ch - '0'; return x * f; } inline bool cmp(node x, node y) { return x.t < y.t; } inline void spfa() { int i, u, v; q.push(0); while(!q.empty()) { u = q.front(); q.pop(); vis[u] = 0; for(i = head[u]; ~i; i = next[i]) { v = to[i]; if(dis[v] < dis[u] + 1) { dis[v] = dis[u] + 1; if(!vis[v]) { q.push(v); vis[v] = 1; } } } } } inline void add(int x, int y) { to[cnt] = y; next[cnt] = head[x]; head[x] = cnt++; } int main() { int i, j, k; n = read(); memset(head, -1, sizeof(head)); for(i = 1; i <= n; i++) p[i].id = i, p[i].t = read(); for(i = 1; i <= n; i++) for(j = 1; j <= n; j++) map[i][j] = read(); sort(p + 1, p + n + 1, cmp); for(i = 1; i <= n; i++) map[0][i] = map[1][i]; p[0].id = p[0].t = 0; for(i = 0; i <= n; i++) for(j = i + 1; j <= n; j++) if(p[i].t + map[p[i].id][p[j].id] <= p[j].t) add(p[i].id, p[j].id); spfa(); for(i = 1; i <= n; i++) ans = max(ans, dis[i]); printf("%d\n", ans); return 0; }
相关文章推荐
- BZOJ 1663: [Usaco2006 Open]赶集 floyd(划掉+dp
- bzoj 1663: [Usaco2006 Open]赶集(最长路)
- 【动态规划】bzoj1663 [Usaco2006 Open]赶集
- BZOJ1663: [Usaco2006 Open]赶集
- BZOJ1663: [Usaco2006 Open]赶集
- 【bzoj1663】[Usaco2006 Open]赶集 dp
- bzoj1663 [Usaco2006 Open]赶集
- bzoj1663 [Usaco2006 Open]赶集 (最短路)
- 【BZOJ】1665: [Usaco2006 Open]The Climbing Wall 攀岩(spfa)
- 【BZOJ】1664: [Usaco2006 Open]County Fair Events 参加节日庆祝(线段树+dp)
- 【动态规划】bzoj1664 [Usaco2006 Open]County Fair Events 参加节日庆祝
- BZOJ1727: [Usaco2006 Open]The Milk Queue 挤奶队列
- bzoj 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝【dp+树状数组】
- BZOJ 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝( dp )
- bzoj 1665: [Usaco2006 Open]The Climbing Wall 攀岩(最短路)
- bzoj1727 [Usaco2006 Open]The Milk Queue 挤奶队列 贪心
- [BZOJ1664] [Usaco2006 Open]County Fair Events 参加节日庆祝
- bzoj1728[Usaco2006 Open]Two-Headed Cows 双头牛 二分+染色
- bzoj:1665 [Usaco2006 Open]The Climbing Wall 攀岩
- BZOJ1665 : [Usaco2006 Open]The Climbing Wall 攀岩