HDU 2121——Ice_cream’s world II——————【最小树形图、不定根】
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u
Description
Input
Output
Sample Input
Sample Output
- #include<stdio.h>
- #include<string.h>
- #include<math.h>
- #include<algorithm>
- #include<iostream>
- #include<vector>
- using namespace std;
- typedef long long INT;
- const int maxn = 1100;
- const int INF = 0x3f3f3f3f;
- struct Edge{
- int from,to;
- int dist;
- }edges[maxn*maxn];
- int pre[maxn],vis[maxn],ID[maxn];
- int In[maxn];
- int ansidx ;
- INT Zhuliu(int root,int n,int m){
- INT ret = 0;
- int u,v;
- while(true){
- for(int i = 0; i < n; i++){
- In[i] = INF;
- }
- for(int i = 0; i < m; i++){
- Edge &e = edges[i];
- u = e.from; v = e.to;
- if(In[v] > e.dist && u != v){
- pre[v] = u;
- if(u == root){ //记录边的编号,这个编号-m就是点编号,因为我们加边是从顶点从小到大
- ansidx = i;
- }
- In[v] = e.dist;
- }
- }
- for(int i = 0; i < n; i++){
- if(i == root) continue;
- if(In[i] == INF)
- return -1;
- }
- In[root] = 0;
- int cntcir = 0;
- memset(vis,-1,sizeof(vis));
- memset(ID,-1,sizeof(ID));
- for(int i = 0; i < n; i++){
- ret += In[i];
- v = i;
- while(vis[v]!= i && ID[v] ==-1 &&v != root){
- vis[v] = i;
- v = pre[v];
- }
- if(v != root && ID[v] == -1){
- for(u = pre[v]; u != v; u = pre[u]){
- ID[u] = cntcir;
- }
- ID[v] = cntcir++;
- }
- }
- if(cntcir == 0){
- break;
- }
- for(int i = 0; i < n; i++){
- if(ID[i]==-1){
- ID[i] = cntcir++;
- }
- }
- for(int i = 0; i < m; i++){
- v = edges[i].to;
- Edge & e = edges[i];
- e.from = ID[e.from];
- e.to = ID[e.to];
- if(e.from != e.to){
- e.dist -= In[v];
- }
- }
- n = cntcir;
- root = ID[root];
- }
- return ret;
- }
- int main(){
- int n,m, T, cas = 0;
- while(scanf("%d%d",&n,&m)!=EOF){
- int a,b,c;
- INT sumd = 0;
- for(int i = 0; i < m; i++){
- scanf("%d%d%d",&a,&b,&c);
- a++,b++;
- edges[i].from = a;
- edges[i].to = b;
- if(a == b){
- edges[i].dist = INF;
- continue;
- }
- edges[i].dist = c;
- sumd += c;
- }
- for(int i = 0; i < n;i++){
- edges[m+i].from = 0;
- edges[m+i].to = i + 1;
- edges[m+i].dist = sumd + 1;
- }
- INT res = Zhuliu(0,n+1,m+n);
- if(res == -1||res > 2*sumd+1){
- puts("impossible");
- }else{
- printf("%lld %d\n",res - sumd -1,ansidx - m);
- }puts("");
- }
- return 0;
- }
- /*
- 3 2
- 0 1 2
- 1 2 3
- 3 0
- */
HDU 2121——Ice_cream’s world II——————【最小树形图、不定根】的更多相关文章
- HDU 2121 Ice_cream’s world II 最小树形图 模板
开始学习最小树形图,模板题. Ice_cream’s world II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32 ...
- HDU 2121 Ice_cream’s world II 最小树形图
这个题就是需要求整个有向带权图的最小树形图,没有指定根,那就需要加一个虚根 这个虚根到每个点的权值是总权值+1,然后就可以求了,如果求出来的权值大于等于二倍的总权值,就无解 有解的情况,还需要输出最根 ...
- HDU2121 Ice_cream’s world II —— 最小树形图 + 不定根 + 超级点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2121 Ice_cream’s world II Time Limit: 3000/1000 MS (J ...
- HDU 2121 Ice_cream’s world II 不定根最小树形图
题目链接: 题目 Ice_cream's world II Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- hdu 2121 Ice_cream’s world II (无定根最小树形图)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2121 题目大意: 有n个点,有m条单向路,问这n个点组成最小树形图的最小花费. 解题思路: 1:构造 ...
- HDU - 2121 Ice_cream’s world II 无根最小树形图
HDU - 2121 :http://acm.hdu.edu.cn/showproblem.php?pid=2121 比较好的朱刘算法blog:https://blog.csdn.net/txl199 ...
- hdu 2121 Ice_cream’s world II
Ice_cream’s world II http://acm.hdu.edu.cn/showproblem.php?pid=2121 Time Limit: 3000/1000 MS (Java/O ...
- hdu2121 Ice_cream’s world II 最小树形图(难)
这题比HDU4009要难一些.做了4009,大概知道了最小树形图的解法.拿到这题,最直接的想法是暴力.n个点试过去,每个都拿来做一次根.最后WA了,估计是超时了.(很多题都是TLE说成WA,用了G++ ...
- hdoj 2121 Ice_cream’s world II 【没有最低树的根节点】
称号:pid=2121" target="_blank">hdoj 2121 Ice_cream's world II 题意:题目是一道躶题,给n个点,m条边的有向 ...
随机推荐
- docker安装oracle
最近工作上面遇到一个性能相关的问题,大体描述一下: 批量任务执行的过程中导致数据库sql执行时间过长,查看之后是由于批量任务占满数据库连接池导致的,至于为什么批量任务会不受系统控制导致连接池占满就不说 ...
- 利用excel制作二维码
1 将想要通过扫描二维码访问的目标网址放入A1单位格 2 在excel 编辑区右击选择“自定义功能区” 3 然后将“开发者工具”选上 4 点击菜单栏的“开发者工具---插入--->其他控件” 5 ...
- 正经学C#_布尔运算[布尔值与其布尔运算符]:《c#入门经典》
前面几个章节简述了 C#中得常用得算术运算符.这一章节说布尔值与其布尔运算符. 布尔值在c#中表示方式是 bool类型,这个类型可以储存两个值,true或者false,或者真或者假,可以说0或者1. ...
- Linux CentOS 7下Memcached 安装与配置
前言 本篇文章记录一下Linux CentOS 7中关于Memcached的安装与配置. 安装 安装memcached之前首先需要安装libevent,我这里用的版本是: •libevent-2.0. ...
- [MOOC程序设计与算法二] 递归二
1.表达式计算 输入为四则运算表达式,仅由整数.+.-.* ./ .(.) 组成,没有空格,要求求其值.假设运算符结果都是整数 ."/"结果也是整数 表达式也是递归的定义: 表达式 ...
- 【转】oracle远程导入数据库
源地址:http://blog.chinaunix.net/uid-20980141-id-447996.html
- loj #547. 「LibreOJ β Round #7」匹配字符串
#547. 「LibreOJ β Round #7」匹配字符串 题目描述 对于一个 01 串(即由字符 0 和 1 组成的字符串)sss,我们称 sss 合法,当且仅当串 sss 的任意一个长度为 ...
- React Native 在用户网络故障时自动调取缓存
App往往都有缓存功能,例如常见的新闻类应用,如果你关闭网络,你上次打开App加载的数据还在,只是不能加载新的数据了. 我的博客bougieblog.cn,欢迎前来尬聊. 集中处理请求 如果你fetc ...
- win10全半角切换
shift+sapce shift+sapce:全半角切换快捷键,编程的时候发现英文是这种状态,就需要用快捷键切换成半角. (查过老是忘记,在这里写一下记住它)
- From表单提交刷新页面?
form表单提交跳转 写作原因: 楼主的html水平一般,偶然想起周围人常说的form表单提交会刷新页面,闲来无事,就想想其中的原因 想来想去为什么会刷新,猜想了以下几条 1.先提交数据,等服务器 ...