spfa模板 和 拓扑排序 模板(HDU1874 和 HDU3342)
2015-08-16 23:51
423 查看
<pre name="code" class="cpp">//SPFA模版://HDU 1874#include <algorithm>#include <iostream>#include <cstring>#include <cstdlib>#include <cstdio>#include <string>#include <vector>#include <cmath>#include <ctime>#include <queue>#include <stack>#include <set>#include <map>using namespace std;typedef __int64 LL;const int mx = 2e5 + 5;const int inf = 0x3f3f3f3f;int n,m,mp[1001][1001],d[1001];bool visit[201];void init() { for(int i=0; i<=n; i++) for(int j=0; j<=n; j++) mp[i][j]=inf; for(int i=0; i<=n; i++) d[i]=inf,visit[i]=0;}void spfa(int s) { queue<int> k; k.push(s); d[s]=0; visit[s]=1; while(!k.empty()) { int h=k.front(); k.pop(); visit[h]=0; for(int i=0; i<n; i++) { if(d[i]-mp[h][i]>d[h]) { d[i]=mp[h][i]+d[h]; if(!visit[i]) { k.push(i); visit[i]=1; } } } }}int main() { while(scanf("%d%d",&n,&m)!=EOF) { init(); int x,y,w; for(int i=0; i<m; i++) { scanf("%d%d%d",&x,&y,&w); mp[x][y]=mp[y][x]=(w<mp[x][y]?w:mp[x][y]); } int s,t; scanf("%d%d",&s,&t); spfa(s); if(d[t]==inf) puts("-1"); else printf("%d\n",d[t]); } return 0;}
//HDU3342(拓扑排序模版)#include<cstdio>#include<cstring>#include<set>using namespace std;struct khp { int in; set<int> k;};khp y[101];bool final[101];int n,m;bool topu() { int t,s=0,i,j; bool judge=0; for(i=0; i<n; i++) if(y[i].in==0) { t=i; break; } if(i==n) return 0; final[t]=1; while(s<n) { judge=0; for(set<int>::iterator it=y[t].k.begin(); it!=y[t].k.end(); it++) y[*it].in--; for(i=0; i<n; i++) if(y[i].in==0&&!final[i]) { t=i; s++; final[t]=1; judge=1; break; } if(!judge) break; } if(s!=n-1) return 0; else return 1;}int main() { int i,j,a,b; while(scanf("%d%d",&n,&m)!=EOF) { for(i=0; i<101; i++) { final[i]=0; y[i].in=0; y[i].k.clear(); } if(!n&&!m) break; for(i=0; i<m; i++) { scanf("%d%d",&a,&b); if(!y[b].k.count(a)) { y[b].k.insert(a); y[a].in++; } } bool judge=topu(); if(!judge) puts("NO"); else puts("YES"); } return 0;}
相关文章推荐
- hihoCoder #1153 Numeric Keypad
- 【0】依照Django官网:实现第一个django app 安装必要的工具/模块
- 【Jquery】jQuery获取URL参数的两种方法
- 关于在win7内集成usb3.0驱动。
- 【每周一讲】Java的ThreadLocal
- OC_SingleTon(单例)
- Exchanger
- HDU 1045 Fire Net 状压暴力
- 【2】Hello World示例
- “==”和equals方法区别
- Python入门(十二) Json模块的使用
- String比较中==和equal()的区别
- 一步一步教你MVVM同时玩转INotifyPropertyChanged和ObservableCollection(转)
- 写给刚毕业的程序猿同学们,和心浮气躁的现在的我------摘自:编程狂人
- 《疯狂Android讲义》目录
- JStorm/Strom配置executors和tasks(线程和实例)
- 用create table 命令建立表
- Leetcode201(Bitwise AND of Numbers Range)
- 开源QT项目
- leetcode - Longest Palindromic Substring