【HDU】4738 Caocao's Bridges 双连通分量

来源:互联网 发布:dna数据库 编辑:程序博客网 时间:2024/05/29 09:23

这题题面有毒


输出也有毒


ans=0时输出1

初始有点未连通输出0


AC时有点方

万一明天也错在这种地方咋办啊


Run IDSubmit TimeJudge StatusPro.IDExe.TimeExe.MemoryCode Len.LanguageAuthor227669822017-11-10 19:12:56Accepted473862MS13848K1799 BG++FMM666227668382017-11-10 19:06:58Wrong Answer473846MS13844K1724 BG++FMM666


#include <cstdio>#include <cstring>#include <algorithm>#include <stack>#define C (c=nc())using namespace std;stack<int>stk;int tot,ans,m,n,col;int to[2000005],fr[2000005],nxt[2000005],val[2000005],lnk[1005];int dfn[1005],low[1005],c[1005];bool b[1005];inline char nc(void){static char ch[100010],*p1=ch,*p2=ch;return p1==p2&&(p2=(p1=ch)+fread(ch,1,100010,stdin),p1==p2)?EOF:*p1++;}inline void read(int &n){static char c;int f=1;n=0;C;while (c<'0'||c>'9') c=='-'?f=-1,C:C;while (c>='0'&&c<='9') n=(n<<3)+(n<<1)+c-48,C;return (void)(n*=f);}void Tarjan(int x,int edge){dfn[x]=low[x]=++tot;b[x]=1,stk.push(x);register int i;for (i=lnk[x];~i;i=nxt[i]){if (i==(edge^1)) continue;if (dfn[to[i]]==0){Tarjan(to[i],i);low[x]=min(low[to[i]],low[x]);}elseif (b[to[i]]){low[x]=min(low[x],dfn[to[i]]);}}if (dfn[x]==low[x]){++col;while (x!=stk.top()) b[stk.top()]=0,c[stk.top()]=col,stk.pop();c[x]=col,b[x]=0,stk.pop();}return;}int main(void){while (1){read(n),read(m);if (n==0&&m==0) return 0;ans=2139062143,tot=0,col=0;memset(lnk,0xff,sizeof(lnk));memset(nxt,0xff,sizeof(nxt));memset(dfn,0,sizeof(dfn));memset(low,0,sizeof(low));register int i;for (i=0;i<=2*m-1;i+=2){read(fr[i]),read(to[i]),read(val[i]);nxt[i]=lnk[fr[i]],lnk[fr[i]]=i;to[i+1]=fr[i],val[i+1]=val[i];nxt[i+1]=lnk[to[i]],lnk[to[i]]=i+1;}Tarjan(1,3000000);for (i=0;i<=2*m-1;i+=2){if (c[fr[i]]!=c[to[i]]) ans=min(ans,val[i]);}if (!ans) ans=1; else if (ans==2139062143) ans=-1;for (i=1;i<=n;++i)if (!dfn[i]){ans=0;break;}printf("%d\n",ans);}return 0;}


原创粉丝点击