HDU 6141 I am your Father!(最小树形图)
来源:互联网 发布:动物相机软件 编辑:程序博客网 时间:2024/06/05 07:52
Description
给出一个
Input
第一行一整数
Output
对于每组用例,输出最大费用有向树的权值和和
Sample Input
2
3 3
1 2 10
1 3 10
2 3 10
3 3
1 2 10
1 3 10
2 3 11
Sample Output
20 1
21 2
Solution
模版题,通过改变边权使得
Code
#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 1111struct Edge{ int u,v,c;}edge[10*maxn];int pre[maxn],id[maxn],vis[maxn],in[maxn];int zhuliu(int root,int n,int m){ int ans=0,u,v; while(1) { for(int i=0;i<n;i++)in[i]=INF; for(int i=0;i<m;i++) if(edge[i].u!=edge[i].v&&edge[i].c<in[edge[i].v]) { pre[edge[i].v]=edge[i].u; in[edge[i].v]=edge[i].c; } for(int i=0;i<n;i++) if(i!=root&&in[i]==INF) return -1; int res=0; memset(vis,-1,sizeof(vis)); memset(id,-1,sizeof(id)); in[root]=0; for(int i=0;i<n;i++) { ans+=in[i]; v=i; while(vis[v]!=i&&id[v]==-1&&v!=root) { vis[v]=i; v=pre[v]; } if(id[v]==-1&&v!=root) { for(u=pre[v];u!=v;u=pre[u]) id[u]=res; id[v]=res++; } } if(res==0)break; for(int i=0;i<n;i++) if(id[i]==-1) id[i]=res++; for(int i=0;i<m;i++) { v=edge[i].v; edge[i].u=id[edge[i].u]; edge[i].v=id[edge[i].v]; if(edge[i].u!=edge[i].v) edge[i].c-=in[v]; } n=res; root=id[root]; } return ans;}int T,n,m;int main(){ scanf("%d",&T); while(T--) { scanf("%d%d",&n,&m); for(int i=0;i<m;i++) { scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].c); edge[i].u--,edge[i].v--,edge[i].c*=-n; if(edge[i].v==n-1)edge[i].c+=edge[i].u; } int ans=-zhuliu(0,n,m); printf("%d %d\n",(ans+n-1)/n,(ans+n-1)/n*n-ans+1); } return 0;}
阅读全文
0 0
- HDU 6141 I am your Father!(最小树形图)
- HDU 6141 I am your Father!(最小树形图+权值编码)
- hdu 6141 I am your Father!(最小树形图+权值编码)
- HDU 6141 ( I am your Father! ) (最小树形图+权值编码)
- [HDU 6141] I am your Father
- hdu6141-多校8&最小树形图&朱刘算法-I am your Father!
- HDU 6141 最小树形图
- hdu 4966 (最小树形图)
- hdu 4009(最小树形图)
- HDU 4009 最小树形图
- HDU 4009 最小树形图
- hdu 4966 最小树形图
- HDU 4966 (最小树形图)
- HDU 4009 最小树形图
- Uva - 11419 - SAM I AM(二分图最小点覆盖)
- UVA 11419 SAM I AM(二分图最小点覆盖)
- UVA 11419 - SAM I AM(二分图匹配+最小点覆盖)
- UVA 11419 SAM I AM (二分图,最小割)
- vue下鼠标按住滑动
- Python+pycharm安装详细教程
- MFC文件操作大全
- tcp keeplive
- 从Uncaught SyntaxError: Unexpected token ")" 问题看javascript:void的作用
- HDU 6141 I am your Father!(最小树形图)
- vue项目中浏览器图标的设置
- bjui关闭当前页及弹窗层,刷新当前页及弹窗层
- Friend-Graph(HDU 3152)
- Qt 学习之路 2(36):二进制文件读写
- 详情页返回列表内容缓存及定位实现
- 去掉alert,confirm弹出框显示的url
- poi操作word文档(替换,插入图片)
- 剑指Offer 面试题14 剪绳子