记新生赛(2013多校第二场题解)
A
B warm up
无向图有重边求桥树上DFS遍历找最长路模板。。。
Code #pragma comment(linker,"/STACK:102400000,102400000") #include <iostream> #include <cstdio> #include <cstring> #include <vector> #define PII make_pair #define edge vector< pair<int,int> > #define fill(x,y) memset(x,y,sizeof(x)); using namespace std; const int maxn=200000+10,maxm=1000000+10; edge G[maxn]; int DFN[maxn],Low[maxn]; bool bridge[maxm]; int Index,ans,all,n,m; void Tarjan(int u,int id) { DFN[u]=Low[u]=++Index; for(edge::iterator i=G[u].begin();i!=G[u].end();i++){ int v=i->first,t=i->second; if(t==id) continue; if(!DFN[v]){ Tarjan(v,t); Low[u]=min(Low[v],Low[u]); if(Low[v]==DFN[v]){ all+=(int)(!bridge[t]); bridge[t]=1; } } else Low[u]=min(DFN[v],Low[u]); } } void dfs(int u) { DFN[u]=1; for(edge::iterator i=G[u].begin();i!=G[u].end();i++) if(Low[i->first]<0){ Low[i->first]=Low[u]+(int)bridge[i->second]; dfs(i->first); } } int main() { while(cin>>n>>m){ if((n==0)&&(m==0))break; for(int i=1;i<=n;i++)G[i].clear(); fill(Low,0); fill(DFN,0); fill(bridge,0); Index=0;ans=0;all=0; for(int i=1;i<=m;i++){ int x,y; cin>>x>>y; G[x].push_back(PII(y,i)); G[y].push_back(PII(x,i)); } for(int i=1;i<=n;i++) if(!DFN[i])Tarjan(i,0); fill(DFN,0); for(int i=1;i<=n;i++) if(!DFN[i]){ fill(Low,255);Low[i]=0;dfs(i); int langest=0,s=0; for(int i=1;i<=n;i++) if(langest<Low[i]){ langest=Low[i]; s=i; } fill(Low,255);Low[s]=0;dfs(s); for(int i=1;i<=n;i++) ans=max(ans,Low[i]); } cout<<all-ans<<endl; } return 0; }
相关推荐
- 2018-2019赛季多校联合新生训练赛第三场(2018/12/8)补题题解 感慨 A 变形虫(语法基础) B 冬眠 (数学) C 进制转换 (语法基础) D 最大的数II (数学) E 取数排列 (全排列) F 懒羊羊找朋友 (结构体排序) G 求满足条件的数 (语法基础) H 自然数无序拆分 (DFS) I 大写字母的序列 (语法基础) J 弗洛格 (语法基础) K 移动次数最少 (贪心) L 小矮人 (语法基础) M 小米 (语法基础) N 小球 (思维) O 找最长良序字符串 (字符串基础)
- 2018-2019赛季多校联合新生训练赛第四场(2018/12/9)补题题解 感慨 A 数一数(思维) B 博物馆(语法基础) C 旅游(基础编程能力) D 17倍(字符串模拟) E 约数国王 F 移动石子(博弈论) G 列车线路 H 搭积木 I 幸运数字III(数论) J 英雄卡(基础编程能力) K 最强阵容(字符串基础) L 最强素数
- 2018-2019赛季多校联合新生训练赛第二场(2018/12/7)补题题解 感慨 A 朋友(思维) B 排队IV(结构体排序) C 爱好数学的国王(数论) D 修建高楼(思维) E 金子数(结构体排序) F 扑克牌游戏(字符串基础) G 垃圾装袋(贪心) H 组装玩具(二分查找) I 判奇偶(语法基础) J 零花钱(语法基础) K 统计数字(语法基础) L 译码程序(字符串基础)
- 记新生赛(2013多校第二场题解)
- 多校7
- 2013 Multi-University Training Contest 6