最短路径-Deleting Edges-hdu6026
来源:互联网 发布:ptgui 控制点优化 编辑:程序博客网 时间:2024/06/07 01:56
我们发现一个事情,那就是如果在图中求最短路的话,那么边的数目也是n-1,(纪念我以为是mst的蠢蠢的直觉)。
给定你一个图,可以删除一条边,然后让这个图的所有点距离1的最短路径都不变,问你最多有几种情况
1 方法,统计每个点可以达到最短路的入度值,然后相乘,就好了
2 我开始用的spfa,在中间加一个定义,但这是不对的,因为可能出现相等但并不是最短路。
等一个点出栈后,在遍历后面的点的时候也可能入栈,(层次高但是路径近,可能中间出现了一次相等,但是并不是最短的路径哦,还是跑完判断比较好,)
3 另外我还看了大神的其他解法,直接在矩阵上。。。
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <queue>const int maxn=220;const long long mod=1e9+7;using namespace std;typedef long long ll;struct Node{ int v,w; Node(){} Node(int _a,int _b){v=_a;w=_b;}};vector<Node> G[maxn];void add(int a,int b,int c){ G[a].push_back(Node(b,c));}int d[maxn];ll all[maxn];int m;void spfa(){ queue<int>q; bool vis[maxn]; for(int i=0;i<maxn;i++) d[i]=0x7fffffff; memset(vis,false,sizeof(vis)); q.push(1); d[1]=0; while(!q.empty()) { int u=q.front(); q.pop(); vis[u]=false; for(int i=0;i<G[u].size();i++) { Node s=G[u][i]; if(d[s.v]>=d[u]+s.w) { d[s.v]=d[u]+s.w; if(!vis[s.v]) { vis[s.v]=true; q.push(s.v); } } } }}int main(){ char s[maxn][maxn]; char c; while(~scanf("%d",&m)) { for(int i=0;i<maxn;i++) G[i].clear(); memset(all,0,sizeof(all)); getchar(); for(int i=1;i<=m;i++) { for(int j=1;j<=m;j++) { c=getchar(); s[i][j]=c; if(c!='0') add(i,j,c-'0'); } getchar(); } spfa(); ll in[maxn]; memset(in,0,sizeof(in)); for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) { if(i==j) continue; if(s[i][j]=='0') continue; if(s[i][j]-'0'+d[i]==d[j]) in[j]++; } ll sum=1; for(int i=1;i<=m;i++) { if(in[i]!=0) {sum*=in[i]; sum=sum%mod;} } cout<<sum<<endl; } return 0;}
0 0
- 最短路径-Deleting Edges-hdu6026
- HDU6026-Deleting Edges
- HDU6026 Deleting Edges
- HDU6026 Deleting Edges (最短路树计数)
- HDU6026 Deleting Edges(Dijkstra)
- hdu 6026 Deleting Edges(最短路)
- Hdu 6026 Deleting Edges【思维+最短路】
- HDU 6026 Deleting Edges【最短路】【思维题】
- HDU 6026 Deleting Edges
- hdu 6026 Deleting Edges
- HDU 6026 Deleting Edges【图论】
- HDU6026(最短路)
- 2017 CCPC-WFinal&&HDOJ6026 Deleting Edges
- 最短路径算法
- 最短路径算法
- 最短路径理解
- 最短路径算法
- 最短路径算法
- 中间件 —— 消息中间件(MOM)
- python+gensim︱jieba分词、词袋doc2bow、TFIDF文本挖掘
- ubuntu 之间免密码 scp 文件传输
- SonicOperator之引言1
- Sobolev 空间相关
- 最短路径-Deleting Edges-hdu6026
- 对n个数字进行排序,其中两两不同的数字的个数为k,n远远大于k,而n的取值区间长度超过了内存的大小,时间复杂度最小
- 1、创建和销毁对象
- 优秀程序设计的18大原则[转载]
- 0508
- Caffe--solver.prototxt配置文件 参数设置及含义
- [笔记]如何解决Your project contains C++ files but it is not using a supported native build system
- poj 2192 DP 2个字符串 按照原来的先后顺序 看能否组成特定的字符串
- Hibernate5学习笔记(一)