西电oj 1058 图论,贪心

西电oj 1058 图论,贪心

1058: 找子图

时间限制: 1 Sec  内存限制: 128 MB
提交: 15  解决: 11
[提交][状态][讨论版]

题目描述

现有一张无向图,有n个点m条边,每条边都有一个权值w,现要求从中找出一个子图,这个子图需满足以下特征:
1.子图可以为空。
2.若某条边的两个端点都在此子图中,则这条边在这个子图中。
3.若某条边的两个端点都不在此子图中,则这条边在这个子图外。
4.若某条边的两个端点一个在子图中,另一个不在,则这条边消失。
5.子图中所有边权值的和减去子图外所有边权值的和最大(不包含消失的边)。
输出这个最大值。

输入

多组数据

对于每组数据,第一行两个整数n,m(1<=n<=100000,1<=m<=500000)
接下来m行,每行三个整数u,v,w,表示在u和v间有一条权值为w的无向边(1<=u,v<=n,-1000<=w<=1000)

输出

对于每组数据,输出答案。

样例输入

3 3
1 2 2
2 3 -1
1 3 3
2 1
1 2 -1

样例输出

4
1

题意:用c[u]记录从u出发的所有边的权值和。将原图分为子图u和子图v,ans=u的权值和-v的权值和=[(c[u1]+c[u2]+...+c[uN])-(c[v1]+c[v2]+...+c[vN])]/2;     对某子图u,所有c[u]的和=子图u里的边的权值和的两倍+u边界的边的权值和,因此,用c[u]的和-c[v]的和,边界被减掉了,剩下权值差的两倍,很好地处理了子图边界消失的情况。     对式子中,c[i]>0的点i加到子图u里,c[i]<0的点加到v里即可。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<stack>
#include<queue>
#include<set>
#include<map>
#include<string>
#include<math.h>
#include<cctype>

using namespace std;

typedef long long ll;
const int maxn=1000100;
const int INF=(1<<29);
const double EPS=0.0000000001;
const double Pi=acos(-1.0);

ll c[maxn];
int n,m;

int main()
{
    while(cin>>n>>m){
        memset(c,0,sizeof(c));
        while(m--){
            int u,v;ll w;
            scanf("%d%d%lld",&u,&v,&w);
            c[u]+=w;c[v]+=w;
        }
        ll ans=0;
        for(int i=1;i<=n;i++){
            if(c[i]>0) ans+=c[i];
            else ans-=c[i];
        }
        ans/=2;
        cout<<ans<<endl;
    }
    return 0;
}

 
时间: 2024-10-06 06:48:17

西电oj 1058 图论,贪心的相关文章

西电oj 6月月赛

西电oj 6月月赛 最近确实比较累,加上天气很热,宿舍一群人在打游戏,同时由于本身自己思维题做的不多,所以这次月赛自然而然的被虐了. 不过还是写写总结,顺便留坑以后补题解. A题,水题,但最近手速慢下来了,得多做题了. B题,水题,虽然题面看半天没懂,交了两次WA之后还是过了,看错题对手速狗来说是绝对不允许出现的,WA也不应该在能做的题出现. C题,这题很多人过了.这次没做出来只能说是运气不好,这种题做出来算自己运气好,做不出来算运气不好.这次这道题是用总情况减去掉异构的情况,最后得到答案,奇数

西电oj 1038 状压dp

西电oj 1038  状压dp 1038: 裁玻璃 时间限制: 1 Sec  内存限制: 128 MB提交: 33  解决: 4[提交][状态][讨论版] 题目描述 张老板的玻璃店开张了,生意火爆.今天,隔壁玻璃店的刘老板拿来一块玻璃,意在刁难张老板.刘老板说:“我这块玻璃是由N(行)*M(列)小正方形玻璃拼成的,但是其中有一些玻璃坏了,我希望你现在把它裁成尽量多的2*2的小玻璃,而且这些小玻璃都不能有坏的地方.如果你裁出来的块数不是最多的,我就把你赶出建材市场.”现在,张老板来拜托你帮他解决这

【转】对于杭电OJ题目的分类

[好像博客园不能直接转载,所以我复制过来了..] 1001 整数求和 水题1002 C语言实验题——两个数比较 水题1003 1.2.3.4.5... 简单题1004 渊子赛马 排序+贪心的方法归并1005 Hero In Maze 广度搜索1006 Redraiment猜想 数论:容斥定理1007 童年生活二三事 递推题1008 University 简单hash1009 目标柏林 简单模拟题1010 Rails 模拟题(堆栈)1011 Box of Bricks 简单题1012 IMMEDI

杭电oj 1009 FatMouse&#39; Trade

Tips:本题采用贪心算法,类似于背包问题,关键在于读入数据之后,将数据按 J[i]/F[i] 从大到小排列即可. 1 /**本程序主要采用贪心算法思想,类似于背包问题*/ 2 #include<stdio.h> 3 #include<string.h> 4 int main() 5 { 6 int M,N; 7 while(scanf("%d %d",&M,&N)) 8 { 9 if(M == -1 && N == -1) 10

西电保外攻略之我见

自从保外确定以后就一直想找个机会,向学弟学妹们解读一下今年保研的新政策以及自己在保研过程中所获得的经验.但考虑到保外大师@黄代炜尚在西电,人家不发话我也不好意思赶在大师前头动笔是不?怎奈时光荏苒,2014年高校推免工作已经接近尾声,黄大师却始终毫无动静.佛云“我不下地狱,谁下地狱”,事已至此,只得勉力提笔,将自己对保研过程中的思考写在这里,希望能帮助到未来有志于保外的学弟学妹们.我说的这些主要针对计算机&软件工程专业的学生,其他专业的仅供参考. =========================

异或^符号在C/C++中的使用 &amp; 杭电oj 2095

异或^符号,在平时的学习时可能遇到的不多,不过有时使用得当可以发挥意想不到的结果. 值得注意的是,异或运算是建立在二进制基础上的,所有运算过程都是按位异或(即相同为0,不同为1,也称模二加),得到最终结果. 特点:任何数和0异或都等于它本身;两个相同的数异或后的结果是0: 举例如下: int a = 4 =100(二进制) int b = 3 =011(二进制) int c = a^b = 111 = 7: 下面就^常用应用做个介绍: 1. 在一排数中找到独一无二的一个数 本例启发来自于杭电oj

杭电OJ(HDU)-ACMSteps-Chapter Two-《An Easy Task》《Buildings》《decimal system》《Vowel Counting》

http://acm.hdu.edu.cn/game/entry/problem/list.php?chapterid=1§ionid=2 1.2.5 #include<stdio.h> /* 题意:找闰年. if((i%4==0 && i%100!=0) || i%400==0)count++; 3 2005 25 1855 12 2004 10000 2108 1904 43236 */ int main() { int t,y,n; int i,count=0; whil

我看西电通院月考——学生应该做点什么?

如果你没有耐心看完整篇文章,你可以直接跳到最后一点,看看对于类似通院月考这样让你很郁闷的抓学风政策,我所认为的学生应该怎么做,也是我主要想传达的想法. 1.大学月考政策介绍 前段时间听说西电通院一些年级开始实行月考制度,每门课都要月考:一次考试低于50就算挂科:月考均分低于60也算挂科:月考时间不固定,随机进行通知.也听说指纹签到机的使用,还有不遵守校规,直接宿舍断电断水的事,具体没有去做考证.我不知道这个月考制度后来具体是怎么实施的,实施是否严格,又是否有效. 对于这项政策,有人举双手表示赞同

杭电OJ(HDU)-ACMSteps-Chapter Three-《FatMouse&amp;#39; Trade》《今年暑假不AC》《排名》《开门人和关门人》

http://acm.hdu.edu.cn/game/entry/problem/list.php?chapterid=1§ionid=3 1.3.1 FatMouse' Trade #include <algorithm> /* 题意:价值/代价的比值来排序,买比值大的. Sample Input 5 3 7 2 4 3 5 2 20 3 25 18 24 15 15 10 -1 -1 Sample Output 13.333 31.500 */ #include<stdio.h>