HDU 5294 Tricks Device (最短路变体) 2015多校联合第一场
2015-07-23 19:20
423 查看
第二个答案很好求,求出最短路进过的最少的边数 和总数作差就是了。
关键是第一问,我的做法是记录最短路的所有路径,然后从终点出发,开始搜索,经过的边进行标记,标记了的边不能再访问,如果能到达起点,结果+1。
我的代码:
关键是第一问,我的做法是记录最短路的所有路径,然后从终点出发,开始搜索,经过的边进行标记,标记了的边不能再访问,如果能到达起点,结果+1。
我的代码:
#include<cstdio> #include<iostream> #include<cstring> #include<queue> #include<functional> #include<vector> using namespace std; typedef pair<int,int> P; const int maxn = 2005; const int maxm = 150000; const int inf = 0x3f3f3f3f; struct Nod { int b,next,val; void init(int b,int val,int next) { this->b = b; this->next = next; this->val = val; } }buf[maxm]; int len,E[maxn]; int dis[maxn],pr[maxn][maxn],cnt[maxn],mine[maxn]; priority_queue<P,vector<P>,greater<P> > que; bool mark[maxm]; int n,m; int o1,o2; void init(){ len = o1 = o2 = 0; memset(E,-1,sizeof(E)); memset(pr,-1,sizeof(pr)); memset(cnt,0,sizeof(cnt)); memset(mine,0,sizeof(mine)); memset(mark,0,sizeof(mark)); } void add_edge(int a,int b,int val){ buf[len].init(b,val,E[a]);E[a]=len++; buf[len].init(a,val,E[b]);E[b]=len++; } void dij(){ memset(dis,63,sizeof(dis)); dis[1] = 0; que.push(P(0,1)); int u,v,val,i; while(!que.empty()){ P p = que.top();que.pop(); u = p.second; if(p.first != dis[u]) continue; for(i=E[u];i!=-1;i=buf[i].next){ v = buf[i].b;val = buf[i].val; if(dis[v] > dis[u] + val){ dis[v] = dis[u] + val; mine[v] = mine[u] + 1; cnt[v] = 0; pr[v][cnt[v]++] = i; que.push(P(dis[v],v)); }else if(dis[v] == dis[u] + val){ pr[v][cnt[v]++] = i; mine[v] = min(mine[v],mine[u]+1); } } } o2 = m - mine ; } void dfs(int u){ if(u == 1){ o1++; return; } for(int i=0;i<cnt[u];i++){ int t = pr[u][i]; if(mark[t]) continue; mark[t] = mark[t^1] = true; dfs(buf[t^1].b); } } int main(){ while(~scanf("%d%d",&n,&m)){ init(); int a,b,val,i; for(i=0;i<m;i++){ scanf("%d%d%d",&a,&b,&val); add_edge(a,b,val); } dij();dfs(n); printf("%d %d\n",o1,o2); } return 0; }
相关文章推荐
- Scrapy Shell访问jandan被拒解决方法
- hdu2037 (区间贪心问题)
- Python中的文本处理
- TCP的三次握手,四次挥手全过程
- 深入理解cocos2d-x的anchorPoint锚点和scale缩放之间的配合方式
- NSDate
- HDU 2089 不要62
- Git 常用命令详解(二)
- hdoj 3861 The King’s Problem 【有向图tarjan求SCC + 缩点 + 最小路径覆盖】
- 关于我所发表的随笔
- [转载]VFS—Kernel Space & User Space
- Cordova
- 终于决定要写博客啦
- json进阶(一)js读取解析JSON类型数据
- pat 1093. Count PAT's (25)
- dom4j utf-8
- 多校第二场 1004 hdu 5303 Delicious Apples(背包+贪心)
- json进阶(一)js读取解析JSON类型数据
- Hdu 2222(AC 自动机)
- 关于虚拟继承和直接继承