K.MIKU醬的氪金寶典 (最短路變形||dfs+剪枝)
阿新 • • 發佈:2019-01-06
https://ac.nowcoder.com/acm/contest/221/K
#include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <cstdio> #include <map> #include <queue> #include <stack> #include <vector> #include <set> #define INF 0x3f3f3f3f #define LL long long using namespace std; const int mod=1e9+7; const int maxn=1e5+5; struct Edge { int next; int to; int w; }edge[maxn]; struct node { int num; int dist; node(int x,int y) { num=x; dist=y; } friend bool operator<(node a,node b) { return a.dist>b.dist; } }; int head[maxn]; int n,m,cnt; int dis[maxn]; bool vis[maxn]; void add(int u,int v,int w) { edge[cnt].next=head[u]; edge[cnt].to=v; edge[cnt].w=w; head[u]=cnt++; } void dij(int x) { priority_queue<node>que; memset(dis,0x3f,sizeof(dis)); dis[x]=0; que.push(node(x,0)); while(!que.empty()) { node p=que.top(); que.pop(); int now=p.num; int Max; for(int i=head[now];i!=-1;i=edge[i].next) { Edge e=edge[i]; Max=max(dis[now],e.w); if(dis[e.to]>Max) { dis[e.to]=Max; que.push(node(e.to,dis[e.to])); } } } } int main() { int x,y,w; while(cin>>n>>m) { memset(head,-1,sizeof(head)); for(int i=1;i<=m;i++) { cin>>x>>y>>w; add(x,y,w); } dij(1); cout << dis[n] << endl; } return 0; }
#include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <cstdio> #include <map> #include <queue> #include <stack> #include <vector> #include <set> #define LL long long #define INF 0x3f3f3f3f using namespace std; const int mod=1e9+7; const int maxn=205; int n,m,ans; bool book[maxn]; struct node { int to,w; }; vector<node>v[maxn]; void dfs(int e,int temp_Max) { if(e==n) { ans=min(ans,temp_Max); return ; } if(temp_Max>=ans) return ; for(int i=0;i<v[e].size();i++) { int u=v[e][i].to; int w=v[e][i].w; if(book[u]==true) continue; book[u]=true; dfs(u,max(temp_Max,w)); book[u]=false; } } int main() { while(cin>>n>>m) { for(int i=0;i<maxn;i++) v[i].clear(); for(int i=0;i<m;i++) { int a,b,c; cin>>a>>b>>c; node t; t.to=b; t.w=c; v[a].push_back(t); } ans=INF; memset(book,false,sizeof(book)); dfs(1,0); cout << ans <<endl; } }