博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树的dfs序直径深度重心以及拓扑排序
阅读量:4695 次
发布时间:2019-06-09

本文共 3315 字,大约阅读时间需要 11 分钟。

直径#include
#include
#include
#include
#include
#include
using namespace std;const int N=4e4+10;int d[N],head[N],ver[N],next[N],edg[N];bool vis[N];int tot,ans,n,m,s,t;void init(){ tot=0; ans=0; memset(head,0,sizeof(head)); memset(next,0,sizeof(next)); }void add(int x,int y,int z){ ver[++tot]=y; next[tot]=head[x]; head[x]=tot; edg[tot]=z; }void bfs(int x){ memset(d,0,sizeof(d)); memset(vis,0,sizeof(vis)); queue
q; q.push(x); vis[x]=1; ans=0; while(q.size()) { int cur=q.front(); q.pop(); for(int i=head[cur];i;i=next[i]) { int y=ver[i]; if(!vis[y]) { d[y]=d[cur]+edg[i]; if(d[y]>ans) { ans=d[y]; t=y; } q.push(y); vis[y]=1; } } }}int main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); while(cin>>n>>m) { init(); for(int i=1;i<=m;i++) { int u,v,w; char c; cin>>u>>v>>w>>c; add(u,v,w); add(v,u,w); } bfs(1); s=t; bfs(s); cout<
<
dfs序深度重心#include
using namespace std;typedef long long ll;const int N=1e5+10;int ver[N],next[N],edg[N],a[N],d[N],size[N],head[N];bool vis[N];int tot=0,pos,ans,cnt;int n,m;void init(){ tot=0; ans=1e5+10; memset(vis,0,sizeof(vis)); memset(size,0,sizeof(size)); memset(head,0,sizeof(head)); memset(next,0,sizeof(next));}void add(int x,int y,int z){ ver[++tot]=y; next[tot]=head[x]; edg[tot]=z; head[x]=tot;}void dfs(int x){ a[++cnt]=x; size[x]=1; vis[x]=1; int ma=0; for(int i=head[x];i;i=next[i]) { int y=ver[i]; if(!vis[y]) { d[y]=d[x]+1; dfs(y); size[x]+=size[y]; ma=max(ma,size[y]); } } ma=max(ma,n-size[x]); a[++cnt]=x; if(maans) { ans=ma; pos=x; }}int main(){ while(cin>>n>>m) { init(); for(int i=1;i<=m;i++) { int u,v,w; cin>>u>>v>>w; add(u,v,w); add(v,u,w); } dfs(1); for(int i=1;i<=cnt;i++) cout<
<<" \n"[i==cnt]; for(int i=1;i<=n;i++) cout<
<<" \n"[i==n]; for(int i=1;i<=n;i++) cout<
<<" \n"[i==n]; cout<
<<" "<
<
拓扑排序#include
using namespace std;typedef long long ll;const int N=1e5+10;int head[N],ver[N],next[N],edg[N],d[N],a[N];bool vis[N];int tot,cnt,n,m;void add(int x,int y,int z){ ver[++tot]=y; next[tot]=head[x]; head[x]=tot; edg[tot]=z; d[y]++;}void topsort(){ queue
q; for(int i=1;i<=n;i++) if(d[i]==0) q.push(i); while(q.size()) { int cur=q.front(); q.pop(); a[++cnt]=cur; for(int i=head[cur];i;i=next[i]) { int y=ver[i]; --d[y]; if(!d[y]) q.push(y); } }}int main(){ while(cin>>n>>m) { tot=0; cnt=0; memset(vis,0,sizeof(vis)); memset(head,0,sizeof(head)); memset(next,0,sizeof(next)); memset(d,0,sizeof(d)); for(int i=1;i<=m;i++) { int u,v,w; cin>>u>>v>>w; add(u,v,w); //add(v,u,w); } topsort(); for(int i=1;i<=cnt;i++) cout<
<<" \n"[i==cnt]; } return 0;}

转载于:https://www.cnblogs.com/mch5201314/p/11296286.html

你可能感兴趣的文章
RTP Payload Format for Transport of MPEG-4 Elementary Streams over http
查看>>
Java环境变量设置
查看>>
【JBPM4】判断节点decision 方法3 handler
查看>>
filter 过滤器(监听)
查看>>
node启动时, listen EADDRINUSE 报错;
查看>>
杭电3466————DP之01背包(对状态转移方程的更新理解)
查看>>
kafka中的消费组
查看>>
python--注释
查看>>
SQL case when else
查看>>
SYS_CONTEXT 详细用法
查看>>
Pycharm配置autopep8让Python代码更符合pep8规范
查看>>
我的第一篇博客
查看>>
【C++算法与数据结构学习笔记------单链表实现多项式】
查看>>
C#垃圾回收机制
查看>>
31、任务三十一——表单联动
查看>>
python之hasattr、getattr和setattr函数
查看>>
maven使用阿里镜像配置文件
查看>>
Copy code from eclipse to word, save syntax.
查看>>
arguments.callee的作用及替换方案
查看>>
23 Java学习之RandomAccessFile
查看>>