分珠(dfs+并查集)

1140?分珠

時間限制:500MS? 內存限制:65536K
提交次數:24 通過次數:18

題型: 編程題???語言: G++;GCC

?

Description

如下圖所示,有若干珠子,每顆珠子重量不同,珠子之間有一些細線將它們連在一起。現要求切斷一些細線,將它們分成兩部分,
分割后,單獨每一部分的珠子仍保持相連,且要求盡量做到兩部分總重相等或相差最少。
請編一程序,給定珠子個數、每顆珠子的重量以及珠子之間的連接情況,輸出按上述要求分割后兩部分總重的差值的絕對值。




輸入格式

第一行有兩個數N與M(1<=N,M<=10),N為珠子個數(珠子編號依次為1,2,3,...,N),M為連接珠子的細線數目。第二行為N個正整數,分別為N個珠子的重量。此后M行,每行兩個數X與Y,表示珠子X與珠子Y由細線相連。



輸出格式

按要求分割后兩部分總重的差值的絕對值。



?

輸入樣例

5 5
1 2 3 4 1
1 2
1 3
2 3
3 4
4 5



?

輸出樣例

1



?

題解

? dfs枚舉出所有去掉某些邊的情況。去掉邊后,用并查集求出此時有多少個聯通塊。如果正好有兩個聯通塊,則更新最小值

? 補充:也可以dfs求聯通塊

#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
typedef pair <int,int> pii;
const int maxn=20;
pii P[maxn];
int n,m,cur,ans,val[maxn],flag[maxn],sum[maxn],M[maxn][maxn],f[maxn];
int find(int x)
{int r=x,i=x,t;while (r!=f[r]) r=f[r];while (i!=r)//路徑壓縮{t=f[i];f[i]=r;i=t;}return r;
}
void mix(int x,int y)
{int fx=find(x),fy=find(y);if (fx!=fy){f[fx]=fy;sum[fy]+=sum[fx];//將兒子的值加給祖先cur--;//有兩個塊合并,聯通塊數量減一}
}
void init()
{for (int i=1;i<=n;i++)sum[i]=val[i],f[i]=i;cur=n;//聯通塊數量,初始值為n
}
int getnum()
{init();for (int i=0;i<m;++i){if (flag[i])//該邊沒被取消mix(P[i].first,P[i].second);}if (cur==2){for (int i=2;i<=n;i++)if (find(i)!=find(1))//此時只有兩個聯通塊,可以直接找出與1不是同一個祖先的return abs(sum[find(1)]-sum[find(i)]);}return -1;//聯通塊數量不為2
}
void dfs(int pos)
{if (pos==n+1)return ;flag[pos]=0;//取消該邊int temp=getnum();if (temp==-1)//得不到結果dfs(pos+1);else ans=min(ans,temp);//得到了結果,就沒必要再取消這條邊的情況下繼續遞歸下去了,直接更新flag[pos]=1;dfs(pos+1);//在不取消該邊的情況下遞歸
}
int main()
{scanf("%d%d",&n,&m);ans=0;for (int i=1;i<=n;i++){scanf("%d",&val[i]);ans+=val[i];}int a,b;for (int i=0;i<m;i++){scanf("%d%d",&a,&b);P[i]=make_pair(a,b);flag[i]=1;}dfs(1);printf("%d\n",ans);return 0;
}

?

轉載于:https://www.cnblogs.com/scaugsh/p/5689814.html

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

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

相關文章

那些程序員爆笑段子,扎心了…

1、特殊“2020是屬于程序員的一年。”“怎么說&#xff1f;”“2020-1024996。”2、真相“你們程序員是不是沒見過下班時候的太陽&#xff1f;”“也不是啦&#xff0c;夏天的時候還是能看到的。”“哦哦&#xff0c;夏天黑得比較晚。”“不是&#xff0c;是天亮得比較早。”3、…

lambda中sorted排序

準備工作&#xff0c;新建一個User類 使用stream排序操作&#xff08;默認ASC排序) stream倒序排序操作 sorted(Comparator.reverseOrder()) 代碼例子&#xff1a; /*** lambda* sorted排序*/Testpublic void test19() {List<Integer> list new ArrayList<>();…

python中的括號不是西文嗎_二級Python---python語言的基本語法元素(Day1)

一、基本輸入輸出函數Python中有三個重要的基本輸入、輸出函數&#xff0c;用于輸入、轉換和輸出&#xff0c;分別是input()、eval()、print()。1.print()作用&#xff1a;輸出運算結果&#xff1b;根據輸出內容的不同&#xff0c;有三種用法。①、僅用于輸出字符串&#xff0c…

chart.js 餅圖顯示百分比_實戰PyQt5: 135-數據可視化之QChart繪制餅圖

餅圖是數據可視圖表的基本類型&#xff0c;在QChart中&#xff0c;QPieSeries, QPieSlice處理餅圖的繪制。QPieSeriesQPieSeries類以餅圖形式顯示數據。餅圖系列由定義為QPieSlice對象的切片組成。切片可以具有任何值&#xff0c;因為QPieSeries對象計算切片的百分比與系列中所…

lambda中使用filter過濾

單一條件過濾 /*** 測試filter*/Testpublic void testFilter() {List<User> user new ArrayList<>();user.add(new User(1L, 18, "小明"));user.add(new User(2L, 20, "小王"));user.add(new User(3L, 28, "小剛"));user.add(new U…

Silverlight 打印

摘自&#xff1a;http://www.cnblogs.com/jiajiayuan/archive/2012/04/13/2444246.html Silverlight中的打印只有一個類&#xff0c;那就是PrintDocment這個對象來實現。下面我用兩種方法來實現Silverlight的打印&#xff1a;第一種&#xff1a; private void btnPrint_Click(o…

數據庫系統的體系結構知識筆記

1、集中式數據庫系統分時系統環境下的集中式數據庫系統結構誕生于20世紀60年代中期。當時的硬件和操作系統決定了分時系統環境下的集中式數據庫系統構成早期的數據庫技術的首選結構。數據和數據管理都是集中的&#xff0c;數據庫系統的所有系統&#xff0c;從形式的用戶到DBMS核…

mysql2014授權設置_mysql權限管理(2014-09-15)

本文比較碎片化&#xff0c;不過以問答的形式比較容易理解。如何查看mysql的當前登錄的用戶&#xff1f;select user();mysql -hlocalhost -uroot 與root192.168.11.100 區別&#xff1f;mysql -hlocalhost -uroot只能在本地進行登錄&#xff0c;而root192.168.11.100不能在本…

python網站后臺_Python 網站后臺掃描腳本

Python 網站后臺掃描腳本1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #!/usr/bin/python #codingutf-8 import sys import urllib import time url "http://123.207.123.228/" txt open(r"C:\Users\ww\Desk…

數據庫系統的三級模式結構知識筆記

1、數據抽象的三個層次數據庫系統利用三個層次劃分來抽象來對用戶屏蔽系統的復雜性、簡化用戶與系統的交互。1.1 物理層物理層屬于最低級層次的抽象&#xff0c;描述數據在存儲器上如何進行存儲的。物理層會詳細描述復雜的底層結構。1.2 邏輯層邏輯層屬于中間層&#xff0c;用來…

Arrays.sort()排序

/*** Arrays.sort()排序* 默認升序*/Testpublic void test(){Integer[] result {1,4,7,9};Arrays.sort(result);for (int i 0;i<result.length;i)System.out.println(i);}

import package的問題

在新建class的時候除了名字還可以選擇包名&#xff1a; 新建2個包名&#xff0c;然后在不同的包里寫2個同名的類&#xff0c; 程序中導入另外一個包 package com.hs;import com.hy.Father; 當直接使用Father的時候提示是引用的com.hy.Father public static void main(String[] …

mysql分區列要包含主鍵嗎_MYSQL的分區字段,必須包含在主鍵字段內

在對表進行分區時&#xff0c;如果分區字段沒有包含在主鍵字段內&#xff0c;如表A的主鍵為ID,分區字段為createtime &#xff0c;按時間范圍分區&#xff0c;代碼如下&#xff1a; www.2cto.comCREATE TABLE T1 (id int(8) NOT NULL AUTO_INCREMENT,createtime datetime NOT …

python爬蟲怎么下載圖片到手機_Python爬蟲獲取圖片并下載保存至本地

1、抓取煎蛋網上的圖片。 2、代碼如下&#xff1a; import urllib.request import os #to open the url def url_open(url): requrllib.request.Request(url) req.add_header(User-Agent,Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0) responseu…

數據庫技術基礎:常見基本模型介紹筆記

1、層次模型層次模型采用樹型結構表示數據與數據間的聯系。層次模型中每個節點表示一個實體&#xff0c;實體之間的聯系用節點之間的連線表示&#xff0c;并且除了根節點以外&#xff0c;其他節點有且僅有一個雙親節點。層次模型特點&#xff1a;記錄之間的聯系通過指針實現&am…

升序

/*** 升序*/Testpublic void test25() {List<Integer> array Stream.of(1, 8, 5, 3).collect(toList());// 升序排序array.sort(Integer::compareTo);System.out.println(array);}

核心動畫與UIView的區別

核心動畫與UIView的區別 1、核心動畫只作用于layer&#xff0c;使用核心動畫之前&#xff0c;必須有layer 2、核心動畫只是假象&#xff0c;并沒有移動實際位置 什么時候使用核心動畫&#xff0c;什么時候使用UIView動畫 1、當不需要與用戶進行交互時&#xff0c;使用核心動畫或…

python convert函數_Python內置函數

英文文檔&#xff1a;hex(x)Convert an integer number to a lowercase hexadecimal string prefixed with “0x”, for exampleIf x is not a Python int object, it has to define an __index__() method that returns an integer.說明&#xff1a;1. 函數功能將10進制整數轉…

數據庫技術:數據存儲和查詢知識筆記

1、存儲管理器存儲管理器作用&#xff1a;負責數據庫中數據的存查詢和更新。存儲管理器負責和文件系統交互&#xff0c;將不同的DML語句翻譯成底層文件系統命令&#xff0c;通過這種方式原始數據就通過文件系統存儲在磁盤上。存儲管理器是存儲底層數據和應用程序、以及向數據庫…

mininet在哪編寫python腳本_1 mininet 簡介及同時支持python2和python3

Mininet 是由斯坦福大學研究開發的開源軟件&#xff0c;是一個基于Linux Container虛擬化技術的輕量級網絡模擬器。即可以在個人電腦上模擬出包括交換機、主機、和控制器等軟件定義網絡節點。 為openflow應用提供簡單、免費的應用測試平臺。 支持多用戶獨立的在同一張拓撲上進行…