设为首页 加入收藏

TOP

CF507E――Breaking Good(BFS,DP)
2015-07-20 17:24:11 来源: 作者: 【 】 浏览:1
Tags:CF507E Breaking Good BFS

507E Breaking Good dfs and similar, graphs, shortest paths Submit Add to favourites \ x328

<??http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+zOLS4qO6uPjE49K70Km1wMK3o6y1wMK3s6S2yLa8zqoxo6y1wMK309DBvbj217TMrL/J08O6zbK7v8nTw6GjINGw1dLSu8z1MbW9TrXE1+62zMK3o6zKubXDuMPX7rbMwrfJz7XEtcDCt8irsr+/ydPDo6zG5Mv7tcDCt8irsr+yu7/J08OjrNKqx/O4xLHk17TMrLXEtcDCt8r9wb++ocG/0KGhozwvcD4KPHA+PGJyPgo8L3A+CjxwPrfWzvajujEtTrXE1+62zMK3tcSzpLbI0ru2qMrHyLe2qLXEo6zJ6M6q1+62zMK3s6S2yESjrMno1+62zMK3yc+/ydPDtcS1wMK3yv3Bv86qWKOsy/nT0LXAwrfW0L/J08O1xMr9wb/OqlmhoyDEx8O00OjSqrjEseS1xMr9wb++zcrHRC1YJiM0MztZLVggPUQmIzQzO1ktMlihozwvcD4KPHA+RNPrWba8zqqzo8G/o6zL+dLUztLDx9Kqyrm1w1i+ocG/tPOho7bU09rEs7Hfyse38b/JxNzU2tfutszCt8nPztLDx7/J0tTTw2Rpc1t1XSYjNDM7MT09ZGlzW3Zd0enWpKGjyLu687bU09rU2tfutszCt8nPtcSx36OsztLDx7/J0tRkcMfzWLXE1+608yYjMjA1NDA7oaM8L3A+CjxwPjwvcD4KPHByZSBjbGFzcz0="brush:java;">#include using namespace std; typedef long long LL; const int INF = 0x7fffffff; const int N = 2e5 + 10; const int MOD = 1e9 + 7; struct edge { int v, c; edge() {} edge(int v, int c): v(v), c(c) {} }; map , int> M; vector G[N]; queue Q; int n, m, x[N], y[N], c[N]; int dis[N], dp[N], pre[N]; int ax[N], ay[N], ac[N]; bool vis[N]; int main() { #ifdef Tally_Ho freopen("in.txt", "r", stdin); #endif // Tally_Ho scanf("%d%d", &n, &m); for(int i = 0; i < m; i++) { scanf("%d%d%d", &x[i], &y[i], &c[i]); G[x[i]].push_back(edge(y[i], c[i])); G[y[i]].push_back(edge(x[i], c[i])); } Q.push(1); while(!Q.empty()) { int u = Q.front(); Q.pop(); for(int i = 0; i < G[u].size(); i++) { int v = G[u][i].v; int c = G[u][i].c; //1:working if(!vis[v]) { dis[v] = dis[u] + 1; vis[v] = 1; Q.push(v); } if(dis[v] == dis[u] + 1 && dp[u] + c >= dp[v]) { pre[v] = u; dp[v] = dp[u] + c; } } } int v = n; while(v != 1) { M[make_pair(v, pre[v])] = 1; v = pre[v]; } int len = 0; for(int i = 0; i < m; i++) { bool onRoad = M[make_pair(x[i], y[i])] || M[make_pair(y[i], x[i])]; if(onRoad && c[i] == 0) { ax[len] = x[i], ay[len] = y[i], ac[len++] = 1; } else if(!onRoad && c[i] == 1) { ax[len] = x[i], ay[len] = y[i], ac[len++] = 0; } } printf("%d\n", len); for(int i = 0; i < len; i++) printf("%d %d %d\n", ax[i], ay[i], ac[i]); return 0; }

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇NSMutableString--可变字符串 下一篇bzoj 2243 染色 树链剖分 好题!

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)
·MySQL下载与安装教程 (2025-12-26 13:21:26)
·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)