ural 1982. Electrification Plan (最小生成树)
2013-10-21 12:57
225 查看
重新理解了下最小生成树。。。
以前学的时候很多细节都忽略了。。。
比如:1、edge[i][j]=0是个很巧妙的设置。
2、求最小生成树,由于生成树是图的极小联通子图。最小生成树一定要包含图中
所有的点。
以前学的时候很多细节都忽略了。。。
比如:1、edge[i][j]=0是个很巧妙的设置。
2、求最小生成树,由于生成树是图的极小联通子图。最小生成树一定要包含图中
所有的点。
#include<cstdio> #include<iostream> #include<cstring> #define INF 0x3f3f3f3f using namespace std; int edge[110][110]; int vis[110],dis[110]; bool flag[110]; int n,k,ans; void prim() { int u=1,minw; for(int i=1;i<=n;i++) { vis[i]=0; dis[i]=edge[u][i]; } vis[u]=1; for(int i=1;i<n;i++) { minw=INF; for(int j=1;j<=n;j++) { if(!vis[j] && dis[j]<minw) { minw=dis[j]; u=j; } } ans+=minw; vis[u]=1; for(int j=1;j<=n;j++) { if(!vis[j] && edge[u][j]<dis[j]) dis[j]=edge[u][j]; } } } int main() { int d; while(scanf("%d%d",&n,&k)!=EOF) { memset(vis,0,sizeof(vis)); memset(flag,false,sizeof(flag)); ans=0; for(int i=0;i<k;i++) { scanf("%d",&d); flag[d]=true; } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { scanf("%d",&edge[i][j]); } } for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(flag[i]&&flag[j]) edge[i][j]=0; } } prim(); printf("%d\n",ans); } return 0; }
相关文章推荐
- Ural 1982 Electrification Plan (prim最小生成树)
- ural 1982. Electrification Plan 【最小生成树】
- URAL 1982 最小生成树变形
- URAL-1982 Electrification Plan 最小生成树
- ural 1982. Electrification Plan -最小生成树
- URAL - 1416 Confidential (最小生成树与次小生成树)
- hust/ural Penguin-Avia 最小生成树
- timus 1982 Electrification Plan(最小生成树)
- URAL 1416 Confidential --最小生成树与次小生成树
- [最小直径生成树 模板题] BZOJ 2180 最小直径生成树 & BZOJ 2182 [Spoj1479] TGK & Ural 1569 Networking the “Iset”
- ural Electrification Plan 最小生成树,多个源点
- Ural 1416 Confidential(最小生成树+次小生成树)
- URAL 1416 Confidential <最小生成数和次小生成数>
- URAL 1160. Network 最小生成树
- URAL - 1160 Network(最小生成树)
- URAL 1160 Network(最小生成树)
- URAL 1416 Confidential --最小生成树与次小生成树
- URAL(timus) 1272 Non-Yekaterinburg Subway(最小生成树)
- [最小极差生成树 LCT || 二分答案 CDQ分治 并查集] Ural 2055 Urban Geography
- poj 1258 Agri-Net-----最小生成树 prim