HDU 4738 Caocao's Bridges 桥(2013 ACM/ICPC Asia Regional Chengdu Online 1002)
彩笔请多指教!
转载请注明出处__谢谢! http://www.cnblogs.com/HaibaraAi/articles/3340115.html by---HaibaraAi 求认识大神(ˇ^ˇ),目前只会水题- -#~~~!
1 #include <cstdio> 2 #include <vector> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 #define maxn 1001 7 #define INF 0x7fffffff 8 struct Edge{ 9 int from,to,w; 10 }; 11 vector<Edge>edges; 12 vector<int>G[maxn]; 13 int pre[maxn]; 14 int vis[maxn]; 15 int ans[maxn]; 16 int n,m,k,mmin,dfs_clock; 17 void init(){ 18 for(int i=0;i<n;i++)G[i].clear(); 19 edges.clear(); 20 } 21 void Ade(int from,int to,int w){ 22 edges.push_back((Edge){from,to,w}); 23 edges.push_back((Edge){to,from,w}); 24 int m=edges.size(); 25 G[from].push_back(m-2); 26 G[to].push_back(m-1); 27 } 28 int dfs(int u,int p){ 29 vis[u]=1; 30 int cnt=0; 31 int lowu=pre[u]=++dfs_clock; 32 for(int i=0;i<G[u].size();i++){ 33 Edge e=edges[G[u][i]]; 34 if(!pre[e.to]){ 35 int lowv=dfs(e.to,u); 36 lowu=min(lowu,lowv); 37 if(lowv>pre[u]){ 38 if(e.w==0)ans[k++]=1; 39 else ans[k++]=e.w; 40 } 41 } 42 else if(e.to!=p||cnt>=1){if(pre[e.to]<pre[u])lowu=min(lowu,pre[e.to]);} 43 else cnt++; 44 } 45 return lowu; 46 } 47 int main(){ 48 while(~scanf("%d%d",&n,&m)&&(n+m)){ 49 init(); 50 memset(ans,0,sizeof ans); 51 memset(pre,0,sizeof pre); 52 memset(vis,0,sizeof vis); 53 for(int i=0;i<m;i++){ 54 int a,b,w; 55 scanf("%d%d%d",&a,&b,&w); 56 a--;b--; 57 Ade(a,b,w); 58 } 59 mmin=INF; 60 k=dfs_clock=0; 61 dfs(0,-1); 62 for(int i=0;i<k;i++)if(mmin>ans[i])mmin=ans[i]; 63 for(int i=0;i<n;i++)if(!vis[i]){k=1;mmin=0;break;} 64 if(k==0)printf("-1\n"); 65 else printf("%d\n",mmin); 66 } 67 return 0; 68 }
浙公网安备 33010602011771号