4008

4008


Problem H

Time Limit : 10000/5000ms (Java/Other)   Memory Limit : 65536/65536K (Java/Other)
Total Submission(s) : 46   Accepted Submission(s) : 19
Problem Description
In graph theory, a pseudoforest is an undirected graph in which every connected component has at most one cycle. The maximal pseudoforests of G are the pseudoforest subgraphs of G that are not contained within any larger pseudoforest of G. A pesudoforest is larger than another if and only if the total value of the edges is greater than another one’s.<br><br>
 

Input
The input consists of multiple test cases. The first line of each test case contains two integers, n(0 < n <= 10000), m(0 <= m <= 100000), which are the number of the vertexes and the number of the edges. The next m lines, each line consists of three integers, u, v, c, which means there is an edge with value c (0 < c <= 10000) between u and v. You can assume that there are no loop and no multiple edges.<br>The last test case is followed by a line containing two zeros, which means the end of the input.<br>
 

Output
Output the sum of the value of the edges of the maximum pesudoforest.<br>
 

Sample Input
  
  
3 3 0 1 1 1 2 1 2 0 1 4 5 0 1 1 1 2 1 2 3 1 3 0 1 0 2 2 0 0
 

Sample Output
  
  
3 5




题意:找到一个这样的图,在这个图中,最多有一个环。


使得所有的边的和最大。



贪心+并查集


首先把边排序,然后开始分类讨论。


对于边ab(含有两个端点ab)


如果a,b是属于两个不同的集合


      a b 是两个环中的点,则放弃ab


      a b 有一个是环,则把环当做另一个的祖先,之后在回溯祖先的时候,能找到该点是在某个环中。


AC代码:


#include<stdio.h>


 #include<string.h>


 #include<stdlib.h>


 #include<algorithm>


 using namespace std;


 const int maxn = 10005;


 const int maxm = 100005;


 struct node{


     int u,v,val;


 }edge[ maxm ];


 int fa[ maxn ],circle[ maxn ];


 int find( int x ){


     if( fa[x]==x ) return x;


     fa[x] = find(fa[x]);


     return fa[x];


 }


 bool union_ab( int x,int y ){


     int fax = find(x);


     int fay = find(y);


     if( fax==fay ){


         if( circle[ fax ]==-1 ){


             circle[ fax ] = 1;


             return true;


         }//形成一个环


         return false;


         //已经是环


     }


     else{


         if( circle[ fax ]==circle[ fay ]&&circle[ fax ]==1 )


             return false;


         if( circle[ fax ]==1 )


            fa[ fay ] = fax;


         else


             fa[ fax ] = fay;


      //这里注意把环作为祖先,因为find


         return true;


     }


 }


 void init( int n ){


     for( int i=0;i<n;i++ ){


         fa[i] = i;
      circle[ i ] = -1;


     }


 }


 int cmp( node a,node b ){


     return a.val>b.val;


 }


 int main(){


     int n,m;


     while( scanf("%d%d",&n,&m)==2,n||m ){


         //if( n==0&&m==0 ) break;


         for( int i=0;i<m;i++ )


             scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].val);


         init( n );


         sort( edge,edge+m,cmp );


         int ans = 0;


         for( int i=0;i<m;i++ ){


             if( union_ab( edge[i].u,edge[i].v) )


                 ans += edge[i].val;


         }


         printf("%d\n",ans);


     }


       return 0;


 }

基于MMSkeleton工具包中的ST-GCN模型实现一种基于动态拓扑图的人体骨架动作识别算法python源码+使用说明.zip 改进ST-GCN模型的骨架拓扑图构建部分,使用持续学习思想动态构建人体骨架拓扑图. 将具有多关系特性的人体骨架序列数据重新编码为关系三元组, 并基于长短期记忆网络, 通过解耦合的方式学习特征嵌入. 当处理新骨架关系三元组时, 使用部分更新机制 动态构建人体骨架拓扑图, 将拓扑图送入ST-GCN进行动作识别。 运行MMSKeleton工具包参考[GETTING_STARTED.md](./doc/GETTING_STARTED.md) - 单独使用ST-GCN模型进行人体动作识别参考[START_RECOGNITION.md](./doc/START_RECOGNITION.md) - 训练基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/test_lifelong_model.py ``` - 测试基于动态拓扑图的人体骨架动作识别算法 ``` shell cd DTG-SHR python ./mmskeleton/fewrel/train_lifelong_model.py ``` - 可视化算法运行结果 基于web server搭建前端 [[参考]](https://blog.csdn.net/gzq0723/article/details/113488110) 1、前端模块:包含 'static与'templates'文件夹为界面展示相关的代码。 templates里面包含了两个html的结构文档,用来定义浏览器的显示界面。 static里面的css和img用来修饰界面。 2、服务模块: servel.py里面是web服务的一个业务逻辑。 运行算法性能可视化web服务 ``` shell cd DTG-SHR python ./server.py ``` 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值