hdu 2121
来源:互联网 发布:js收藏地址 编辑:程序博客网 时间:2024/06/05 00:22
题意: 有向图的最小生成树(只管出去,不管回来) 标准的模板啊,
设置一个虚拟节点n 权值是max+1; 代码是对这别人的打的,第一次不会写!
#include <iostream>#include <cstdio>#include <cstring>using namespace std;#define N 1010#define inf 101000000struct edg { int u,v,val;}data[N*N];int ansi; int in[N];int visit[N],id[N];int pre[N];int dri_mst(int root,int n,int m) { int cnt = 0; while(1) { int u,v; for(int i = 0; i < n; i++) in[i] = inf; for(int i = 0; i < m; i++) { //in[i] 选择进入边权值最小的 u = data[i].u; v = data[i].v; if(data[i].val < in[v] && u != v) { pre[v] = u; if(u == root) ansi = i; in[v] = data[i].val; } } for(int i = 0; i < n; i++) { if(i == root) continue; // 根节点没有入度 if(in[i] == inf) return -1; //说明存在点没有入边 } int cntcode = 0; //环的个数 memset(visit,-1,sizeof(visit)); memset(id,-1,sizeof(id)); in[root] = 0; for(int i = 0; i < n; i++) { cnt += in[i]; v = i; while(visit[v] != i && id[v] == -1&& v != root) { visit[v] = i; v = pre[v]; } if(v != root && id[v] == -1) { for(u = pre[v]; u != v; u = pre[u]) id[u] = cntcode; // u属于哪个环 id[v] = cntcode++; } } if(cntcode == 0) break; // 不存在环 //生成树构成了 for(int i = 0; i < n; i++) // 缩点 重新标记 if(id[i] == -1) id[i] = cntcode++; for(int i = 0; i < m; i++) { v = data[i].v; data[i].u = id[data[i].u]; data[i].v = id[data[i].v]; if(data[i].u != data[i].v) // 自环 data[i].val -= in[v]; } n = cntcode; root = id[root]; } return cnt;}int main() { int n,m; while(~scanf("%d %d",&n,&m)) { int sum = 0; for(int i = 0; i < m; i++) { scanf("%d %d %d",&data[i].u,&data[i].v,&data[i].val); sum += data[i].val; } sum ++; for(int i = m; i < m + n; i++) { data[i].u = n; data[i].v = i - m; data[i].val = sum; } int ans = dri_mst(n,n+1,n+m); if(ans == -1 || ans >= 2*sum) printf("impossible\n\n"); else printf("%d %d\n\n",ans - sum,ansi-m); } return 0;}
0 0
- hdu 2121
- hdu 2121
- hdu 2121
- hdu
- hdu
- HDU
- hdu ()
- hdu
- hdu
- HDU
- HDU
- hdu
- hdu
- HDU
- Hdu
- hdu
- hdu-
- hdu
- codeforces 416E President's Path floyd+D(递)P(推)
- 8,6,5,4,1逆序排放,为什么会出现-858993460 ,4,5,6,8?
- #坑2# 强制旋转应用当前屏幕
- 英语学习录——十月
- 设置maven的编译级别
- hdu 2121
- 权限框架——CAS之工作原理
- cortex-M3 异常和中断
- Java注解
- 杭电acm1555
- 杭电5500排书
- css3中transform和transition的用法
- The application you have selected does not exist,Xcode 提交失败
- 1072: [SCOI2007]排列perm