【BZOJ】2395: [Balkan 2011]Timeismoney

題解

最小乘積生成樹!

我們把,x的總和和y的總和作為x坐標和y左邊,畫在坐標系上

我們選擇兩個初始點,一個是最靠近y軸的A,也就是x總和最小,一個是最靠近x軸的B,也就是y總和最小
連接兩條直線,在這條直線上面的點都不用考慮了

我們選一個離直線最遠的點C,且在直線下方,我們用叉積考慮這個東西,也就是……面積最大!我們如果用最小生成樹的話,只要讓面積是負的就好了
推一下式子,發現是\((A.y - B.y) * C.x + (B.x - A.x) * C.y\)我們發現就是把邊設置成
\((A.y - B.y) * E[i].c + (B.x - A.x) * E[i].t\)做一遍最小生成樹

找到C點后遞歸處理A,C和C,B即可

邊界是兩點連線下方沒有點也就是叉積大于等于0

代碼

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <vector>
#include <set>
//#define ivorysi
#define eps 1e-8
#define mo 974711
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define fi first
#define se second
#define MAXN 10005
#define space putchar(' ')
#define enter putchar('\n')
using namespace std;
typedef long long int64;
typedef unsigned int u32;
typedef unsigned long long u64;
typedef double db;
const int64 MOD = 1000000007;
template<class T>
void read(T &res) {res = 0;char c = getchar();T f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1;c = getchar();}while(c >= '0' && c <= '9') {res = res * 10 + c - '0';c = getchar();}res *= f;
}
template<class T>
void out(T x) {if(x < 0) putchar('-');if(x >= 10) {out(x / 10);}putchar('0' + x % 10);
}
int N,M;
struct Point {int64 x,y;int64 v;Point(){};Point(int64 _x,int64 _y) {x = _x;y = _y;v = x * y;}friend bool operator < (const Point &a,const Point &b) {return a.v < b.v || (a.v == b.v && a.x < b.x);}
}ans;
struct Edge {int u,v;int64 c,t,w;Edge(){}Edge(int _u,int _v,int64 _c,int64 _t) {u = _u;v = _v;c = _c;t = _t;}friend bool operator < (const Edge &a,const Edge &b) {return a.w < b.w || (a.w == b.w && a.c < b.c);}
}E[MAXN];
int fa[205];
int getfa(int u) {return fa[u] == u ? u : fa[u] = getfa(fa[u]);
}
Point kruskal() {sort(E + 1,E + M + 1);Point res = Point(0,0);for(int i = 1 ; i <= N ; ++i) fa[i] = i;for(int i = 1 ; i <= M ; ++i) {if(getfa(E[i].u) != getfa(E[i].v)) {fa[getfa(E[i].u)] = getfa(E[i].v);res.x += E[i].c;res.y += E[i].t;}}res.v = res.x * res.y;if(res < ans) ans = res;return res;
}
void Work(Point A,Point B) {for(int i = 1 ; i <= M ; ++i) {E[i].w = (A.y - B.y) * E[i].c + (B.x - A.x) * E[i].t;}Point r = kruskal();if((A.x - r.x) * (B.y - r.y) - (A.y - r.y) * (B.x - r.x) >= 0) return;Work(A,r);Work(r,B);
}
void Solve() {read(N);read(M);int u,v;int64 c,t;for(int i = 1 ; i <= M ; ++i) {read(u);read(v);read(c);read(t);++u;++v;E[i] = Edge(u,v,c,t);}ans.v = 1e18;for(int i = 1 ; i <= M ; ++i) {E[i].w = E[i].c;}Point A = kruskal();for(int i = 1 ; i <= M ; ++i) {E[i].w = E[i].t;}Point B = kruskal();Work(A,B);printf("%lld %lld\n",ans.x,ans.y);
}
int main() {
#ifdef ivorysifreopen("f1.in","r",stdin);
#endifSolve();return 0;
}

轉載于:https://www.cnblogs.com/ivorysi/p/9071158.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250260.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250260.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

http --- http與https相關概念小結

網絡協議 參考 HTTP的特性 HTTP協議構建于TCP/IP協議之上,是一個應用層協議,默認端口是80HTTP是無連接無狀態的 HTTP報文 請求報文 HTTP協議是以ASCII碼傳輸,建立在 TCP/IP 協議之上的應用層規范。規范把HTTP請求分為三個部分:狀態行、請求頭、消息主體。 <method>…

Spring AOP注解方式實現

簡介 上文已經提到了Spring AOP的概念以及簡單的靜態代理、動態代理簡單示例&#xff0c;鏈接地址&#xff1a;https://www.cnblogs.com/chenzhaoren/p/9959596.html 本文將介紹Spring AOP的常用注解以及注解形式實現動態代理的簡單示例。 常用注解 aspect&#xff1a;定義切面…

享元模式-Flyweight(Java實現)

享元模式-Flyweight 享元模式的主要目的是實現對象的共享,即共享池,當系統中對象多的時候可以減少內存的開銷,通常與工廠模式一起使用。 本文中的例子如下: 使用享元模式: 小明想看編程技術的書, 就到家里的書架上拿, 如果有就直接看, 沒有就去買一本, 回家看. 看完了就放到家里…

算法 --- 回溯法

回溯法 參考 - 劍指Offer 回溯法可以看成蠻力法的升級版,它從解決問題每一步的所有可能選項里系統地選擇出一個可行的解決方案. 回溯法解決的問題的特性: 可以形象地用樹狀結構表示: 節點: 算法中的每一個步驟節點之間的連接線: 每個步驟中的選項,通過每一天連接線,可以到達…

013.Zabbix的Items(監控項)

一 Items簡介 Items是從主機里面獲取的所有數據&#xff0c;可以配置獲取監控數據的方式、取值的數據類型、獲取數值的間隔、歷史數據保存時間、趨勢數據保存時間、監控key的分組等。通常情況下item由key參數組成&#xff0c;如監控項中需要獲取cpu信息&#xff0c;則需要一個對…

Cookie 和 Session的區別

pass 下次再寫轉載于:https://www.cnblogs.com/nieliangcai/p/9073520.html

算法 --- 記一道面試dp算法題

題目: 給定一個數組(長度大于1),如下 let a [1,4,3,4,5] // 長度不確定,數值為整數要求寫一個函數,返回該數組中,除本身數字之外其他元素的成積.即返回如下: // 過程[4*3*4*5, 1*3*4*5, 1*4*4*5, 1*4*3*5, 1*4*3*4] // 結果[240, 60, 80, 60, 48]題目要求不使用除法,且時間…

編碼

一、什么是編碼&#xff1f;首先&#xff0c;我們從一段信息即消息說起&#xff0c;消息以人類可以理解、易懂的表示存在。我打算將這種表示稱為“明文”&#xff08;plain text&#xff09;。對于說英語的人&#xff0c;紙張上打印的或屏幕上顯示的英文單詞都算作明文。其次&a…

ASP.NET MVC 實現頁落網資源分享網站+充值管理+后臺管理(10)之素材管理

源碼下載地址&#xff1a;http://www.yealuo.com/Sccnn/Detail?KeyValuec891ffae-7441-4afb-9a75-c5fe000e3d1c 素材管理模塊也是我們這個項目的核心模塊&#xff0c;里面的增刪查改都跟文章管理模塊相同或者相似&#xff0c;唯一不同點可能是對附件的上傳處理&#xff0c;但…

javascript --- [express+ vue2.x + elementUI]登陸的流程梳理

說明 涉及到以下知識點: 登陸的具體流程express、vue2.x、elementUI、axios、jwt、assert 登陸方面的API使用中間件的使用前后端通過http狀態碼,進行響應的操作(這里主要是401)密碼驗證(bcrypt的hashSync方法對明文密碼進行加密,compareSync方法對加密的密碼進行驗證)token的…

設計模式---裝飾模式

今天學習了裝飾模式&#xff0c;做個筆記。。裝飾模式的基礎概念可以參考&#xff1a;https://blog.csdn.net/cjjky/article/details/7478788 這里&#xff0c;就舉個簡單例子 孫悟空有72變&#xff0c;但是它平時是猴子&#xff0c;遇到情況下&#xff0c;它可以變成蝴蝶等等 …

springMvc 注解@JsonFormat 日期格式化

1&#xff1a;一定要加入依賴,否則不生效&#xff1a; <!--日期格式化依賴--><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>${jackson.version}</version>&…

Git很簡單--圖解攻略

Git Git 是目前世界上最先進的分布式版本控制系統&#xff08;沒有之一&#xff09;作用 源代碼管理為什么要進行源代碼管理? 方便多人協同開發方便版本控制Git管理源代碼特點 1.Git是分布式管理.服務器和客戶端都有版本控制能力,都能進行代碼的提交、合并、. 2.Git會在根…

css --- 使用scss生成常用的基本css樣式

"工具樣式"的概念和 SASS(SCSS) 在webpack中使用sass 安裝sass和sass-loader $ npm i sass sass-loader由于使用了腳手架,安裝完畢后重啟前端即可 樣式重置 其實就是樣式的初始化 // reset* {box-sizing: border-box; // 以邊框為準. css3盒模型outline: none;…

vc/vs開發的應用程序添加dump崩潰日志轉

原貼地址&#xff1a;https://blog.csdn.net/wangkui1331/article/details/78029940 vc/vs開發的應用程序出現崩潰的時候&#xff0c;由于沒有任何記錄&#xff0c;導致開發人員很難追蹤&#xff0c;但是添加dump文件后&#xff0c;就可以免除這些煩惱 1.添加方法 &#xff08;…

51 nod 1127最短的包含字符串(尺取法)

1127 最短的包含字符串 收藏關注給出一個字符串&#xff0c;求該字符串的一個子串S&#xff0c;S包含A-Z中的全部字母&#xff0c;并且S是所有符合條件的子串中最短的&#xff0c;輸出S的長度。如果給出的字符串中并不包括A-Z中的全部字母&#xff0c;則輸出No Solution。Input…

Java --- 基礎學習Ⅰ

第一章 開發前言 位、字節 位(bit): 一個數字0或一個數字1,代表一位 字節(Byte): 每逢8位是一個字節,這時數據存儲的最小單位 1 Byte 8 bit 1 KB 1024 Byte 1 MB 1024 KB 1 GB 1024 MB 1 TB 1024 GB 1 PB 1024 TB MS-DOS(Microsoft Disk Operating System) 第二章 Ja…

JSON 數據重復 出現$ref

JSONArray 類型 如果我們往里面add數據的時候 如果數據相同&#xff0c;那么就會被替換成 $ref: 也就是被簡化了 因為數據一樣所直接 指向上一條數據 循環引用&#xff1a;當一個對象包含另一個對象時&#xff0c;fastjson就會把該對象解析成引用。引用是通過$ref標示的&am…

Java --- 基礎學習Ⅱ

繼承 繼承概述 下面有一個學生類 public class Student{private String name;private int age;public void study(){System.out.println("努力學習了");}public String getName() {return name;}public void setName(String name) {this.name name;}public int g…

urllib庫

python內置的最基本的HTTP請求庫&#xff0c;有以下四個模塊&#xff1a; urllib.request  請求模塊 urllib.error    異常處理模塊 urllib.parse   url解析模塊 urllib.robotparser robots.txt解析模塊 urllib.request請求模塊&#xff1a; urllib.request.urlopen(u…