搜索專題題解

題目鏈接:

  codeforces 277A - Learning Languages

題目描述:

  一個團體有n個人,每個人都掌握了一些語言,每個人學一門語言有1個花費,兩個人之間可以通過其他人的翻譯,問最少花費多少使得這個團體的任意兩個人都可以交流?

解題思路:

  可以bfs,dfs求連通塊,也可以用并查集求集合數目。(PS:唯一要注意的是當每一個人都是只會0種語言,辣么每個人是不是都要學習語言,特判一下就好辣)

?搜索專題,先貼dfs代碼咯~

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 205;
 4 struct Edge//鄰接表建圖,dfs求連通塊數目
 5 {
 6     int to, next;
 7 };
 8 
 9 Edge edge[maxn*maxn];
10 int head[maxn], vis[maxn], tot;
11 
12 void Add (int from, int to)
13 {
14     edge[tot].to = to;
15     edge[tot].next = head[from];
16     head[from] = tot ++;
17 }
18 void dfs (int x)
19 {
20     vis[x] = 1;
21     for (int i=head[x]; i!=-1; i=edge[i].next)
22         if (!vis[edge[i].to])
23             dfs (edge[i].to);
24 }
25 
26 int main ()
27 {
28     int n, m;
29     while (scanf ("%d %d", &n, &m) != EOF)
30     {
31         int k, num, sum = 0;
32         tot = 0;
33         memset (head, -1, sizeof(head));
34         memset (edge, 0, sizeof(edge));
35         memset (vis, 0, sizeof(vis));
36         for (int i=0; i<n; i++)
37         {
38             scanf ("%d", &k);
39             sum += k;
40             while (k --)
41             {
42                 scanf ("%d", &num);
43                 Add (i, num+n-1);
44                 Add (num+n-1, i);
45             }
46         }
47         num = 0;
48         for (int i=0; i<n; i++)
49             if (!vis[i])
50             {
51                 dfs(i);
52                 num ++;
53             }
54         if (sum)
55             num --;
56         printf ("%d\n", num);
57     }
58     return 0;
59 }
View Code

?

再貼一個并查集代碼

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 205;
 4 int father[maxn], n, m;
 5 
 6 void init ()
 7 {
 8     for (int i=0; i<maxn; i++)
 9         father[i] = i;
10 }
11 int find (int x)
12 {
13     if (father[x] != x)
14         father[x] = find (father[x]);
15     return father[x];
16 }
17 int main ()
18 {
19     while (scanf ("%d %d", &n, &m) != EOF)
20     {
21         init ();
22         int k, x, ans = 0;
23         for (int i=1; i<=n; i++)
24         {
25             scanf ("%d", &k);
26             if (k)
27                 ans = -1;
28             while (k --)
29             {
30                 scanf ("%d", &x);
31                 int pi = find(i);
32                 int px = find(x+n);
33                 if (pi != px)
34                     father[px] = father[pi];
35             }
36         }
37         for (int i=1; i<=n; i++)
38             if (father[i] == i)
39             ans ++;
40         printf ("%d\n", ans);
41     }
42     return 0;
43 }
View Code

?—————————————————————————————————————我是華麗的分割線——————————————————————————————————

題目鏈接:

  codeforce 520B - Two Buttons

題目描述:

  有n,m兩個數,現有兩種操作:

    1:n可以*2;2:n可以減1。問最少操作多少次可以使n==m?

解題思路:

  這次是最優解,又是搜索專題,肯定是bfs咯,tle的估計就是vis數組出問題咯,還有要注意n,m的范圍喲!

還是先貼bfs代碼

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int maxn = 10005;
 4 struct node
 5 {
 6     int x, step;
 7 };
 8 int bfs (int n, int m)
 9 {
10     node p, q;
11     queue <node> Q;
12     int vis[maxn];
13     memset (vis, 0, sizeof(vis));
14     vis[n] = 1;
15     p.x = n;
16     p.step = 0;
17     Q.push (p);
18     while (!Q.empty())
19     {
20         p = Q.front();
21         Q.pop();
22         if (p.x == m)
23             return p.step;
24         q.step = p.step + 1;
25         int x = p.x - 1;
26         int y = p.x * 2;
27         if (x > 0 && !vis[x])
28         {
29             q.x = x;
30             Q.push (q);
31             vis[x] = 1;
32         }
33         if (p.x<m && y<maxn && !vis[y])
34         {
35             q.x = y;
36             Q.push (q);
37             vis[y] = 1;
38         }
39     }
40 }
41 int main ()
42 {
43     int n, m;
44     while (scanf ("%d %d", &n, &m) != EOF)
45         printf ("%d\n", bfs(n, m));
46     return 0;
47 }
View Code

再貼一個代碼,這個代碼簡單易懂

 1 /*這個要進行逆向思維
 2   這時候要考慮把m-->n
 3   兩種操作就變成了m/2與m+1
 4   當m>n的時候只能進行+1操作
 5   當m<n的時候只能進行/2操作(要討論m的奇偶性)
 6   循環操作,m==n的時候就一切ok啦
 7 */
 8 #include <bits/stdc++.h>
 9 using namespace std;
10 const int maxn = 10005;
11 int main ()
12 {
13     int n, m, ans;
14     while (scanf ("%d %d", &n, &m) != EOF)
15     {
16         ans = 0;
17         while (true)
18         {
19             if (m <= n)
20             {
21                 ans += n - m;
22                 break;
23             }
24             if (m%2)
25             {
26                 m ++;
27                 ans ++;
28             }
29             m /= 2;
30             ans ++;
31         }
32         printf ("%d\n", ans);
33     }
34     return 0;
35 }
View Code

這兩個題目都可以用其他方法做,完美的避開了搜索,不知道會不會對小學弟(美)們造成誤導哦,還是聲明一下搜索很重要的,搜索很重要的,搜索很重要的(重要的事情說三遍)。是很多其他算法的基礎。

?

————————————————————————————————————我是邪魅溫柔的分割線——————————————————————————————

?

題目鏈接:

  Codeforces 445B -?DZY Loves Chemistry

題目描述:

  n種試劑,m種反應(反應發生在兩種試劑之間),DZY想要把這n種試劑混合,DZY依次向試管中加入試劑,剛開始試管的危險系數為1,如果當前所需要加入的試劑能與試管中的某種試劑反應,則試管的危險系數乘二,現在為了安全起見,問試管最高的危險系數是多少?

解題思路:

  很裸地并查集嘛!因為最終的狀態肯定是所有的試劑都在試管里面,只需要知道每個集合里面元素個數就OK啦!!

 1 #include <queue>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <iostream>
 5 #include <algorithm>
 6 using namespace std;
 7 typedef __int64 LL;
 8 const int maxn = 100;
 9 int father[maxn];
10 void init ()
11 {
12     for (int i=0; i<maxn; i++)
13         father[i] = i;
14 }
15 int Find(int x)
16 {
17     if (x != father[x])
18         father[x] = Find(father[x]);
19     return father[x];
20 }
21 int main ()
22 {
23     int n, m;
24     while (scanf ("%d %d", &n, &m) != EOF)
25     {
26         init ();
27         LL ans = 1;
28         while (m --)
29         {
30             int x, y;
31             scanf ("%d %d", &x, &y);
32             int px = Find (x);
33             int py = Find (y);
34             if (px != py)
35             {
36                 father[px] = py;
37                 ans *= 2;
38             }
39         }
40         printf ("%I64d\n", ans);
41     }
42     return 0;
43 }

?

轉載于:https://www.cnblogs.com/alihenaixiao/p/4653579.html

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

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

相關文章

Facebook 開源的快速文本分類器 FastTex

FastText是Facebook開發的一款快速文本分類器&#xff0c;提供簡單而高效的文本分類和表征學習的方法&#xff0c;性能比肩深度學習而且速度更快。 fastText 原理fastText 方法包含三部分&#xff1a;模型架構、層次 Softmax 和 N-gram 特征。下面我們一一介紹。 1.1 模型架構 …

FCN-加載訓練與測試數據

當我們生成了數據后&#xff0c;我們來看看FCN是如何加載數據的。 FCN 代碼預覽 其中&#xff1a; - data : 訓練測試數據 - ilsvrc-nets&#xff1a;存放預訓練的模型 - 剩下的框&#xff1a;不同數據集的訓練測試prototxt - voc_layers&#xff0c;siftflow_layers等&am…

怎么撤銷定時說說_已注冊商標遇到撤三申請怎么辦

很多企業的商標都遇到過商標撤三的情況&#xff0c;撤三簡單的說就是&#xff0c;注冊商標沒有正當理由連續三年不使用的&#xff0c;任何單位或者個人可以向商標局申請撤銷該注冊商標。所以說&#xff0c;無論您的企業多大&#xff0c;商標持有的再多&#xff0c;也要做好商標…

windows下架設SVN服務器并設置開機啟動

1、安裝SVN服務器&#xff0c;到http://subversion.apache.org/packages.html上下載windows版的SVN&#xff0c;并安裝&#xff0c;在命令行下運行svn命令&#xff0c;如下所以&#xff0c;則svn服務器安裝成功。 C:\Documents and Settings\Administrator>svn 使用“svn …

Spartan-6 FPGA SelectIO Resources User Guide 筆記2 SelectIO Attributes/Constraints

1.Location Constraint 用于分配I/O端口 NET <I/O_NAME> LOC "<EXTERNAL_PORT_IDENTIFIER>"; Example: NET MY_IO LOCR7; 2.IOSTANDARD Attribute 用于選擇IO標準如LVCMOS25&#xff0c;LVDS_25等 NET <I/O_NAME> IOSTANDARD”<IOSTANDARD V…

python合并pdf 加書簽_Python生成pdf目錄書簽的實例方法

有時候我們用的一些pdf資料是沒有目錄的&#xff0c;這樣找尋我們想到的東西比較麻煩。本篇文章就為大家帶來python來生成pdf目錄書簽的方法。首先&#xff0c;我們需要下載一個軟件FreePic2Pdf,利用它我們可以將我們的pdf文件導入書簽工具下載&#xff1a;https://www.jb51.ne…

正則表達式及其在python上的應用

今天學習了一早上正則表達式。如下內容部分轉載自《讀懂正則表達式就這么簡單》 一、什么是正則表達式 正則表達式是一種特殊的字符串模式&#xff0c;用于匹配一組字符串&#xff0c;就好比用模具做產品&#xff0c;而正則就是這個模具&#xff0c;定義一種規則去匹配符合規…

安全專家在硬盤固件中發現NSA的網絡間諜程序

本周安全專家在硬盤固件中發現了美國國家安全局&#xff08;NSA&#xff09;的網絡間諜程序&#xff0c;這些程序非常難以被檢測或者刪除。來自卡巴斯基的研究者公布了該惡意程序用來“Phone Home”的URL地址&#xff0c;NSA利用這些隨機、凌亂的地址來收集硬盤上的敏感數據。 …

SVN 分支/合并/切換

本文無條理性&#xff0c;僅作自我參考。 花費了兩個半下午&#xff0c;走馬觀花的看了一下說明文檔&#xff0c;SVN設計的太復雜&#xff0c;對我這樣的&#xff0c;不在一個集體的的業余開發者&#xff0c;要理解起來真是太難了。。。。 分支 Make branches as often as yo…

使用Firefox或Chrome的雇員表現更好不頻繁跳槽

一家銷售軟件幫助雇主招募雇員和留住雇員的公司Cornerstone OnDemand稱&#xff0c;使用非默認瀏覽器如Firefox或Chrome的雇員表現更好不頻繁跳槽。 這項研究旨在幫助那些跳槽率過高的行業&#xff0c;比如呼叫中心的年跳槽率高達45%。對50000名在線工作評估參與者的數據進行分…

關于FCN的數據集著色說明

前方我們講解了《 FCN-數據篇》。里面包含了如何制作類似pascal voc的label。很大篇幅在談如何著色&#xff0c;如何轉化為索引圖像。 由于一些內容參考網上的資料&#xff0c;所以對里面的一些操作含義也有些糊涂。 其實網上的東西也不都對&#xff0c;很多人云亦云。所以需要…

mongobd python_Python操作MongoDB數據庫PyMongo庫使用方法

引用PyMongo復制代碼 代碼如下:>>> import pymongo創建連接Connection復制代碼 代碼如下:>>> import pymongo>>> conn pymongo.Connection(localhost,27017)或復制代碼 代碼如下:>>> from pymongo import Connection>>> conn C…

Android Property Animation動畫

3.0以前&#xff0c;android支持兩種動畫模式&#xff0c;tween animation,frame animation&#xff0c;在android3.0中又引入了一個新的動畫系統&#xff1a;property animation&#xff0c;這三種動畫模式在SDK中被稱為property animation,view animation,drawable animation…

angular實現select的ng-options

ng實現簡單的select <div ng-controller"ngSelect"><select ng-model"vm.selectVal" ng-options"o.title for o in vm.optionsData"><option value"">請選擇</option></select> </div> var app …

Ubuntu14.04下Mongodb數據庫可視化工具安裝部署步驟(圖文詳解)(博主推薦)

不多說&#xff0c;直接上干貨&#xff01; 前期博客 Ubuntu14.04下Mongodb&#xff08;離線安裝方式|非apt-get&#xff09;安裝部署步驟&#xff08;圖文詳解&#xff09;&#xff08;博主推薦&#xff09; Ubuntu14.04下Mongodb官網安裝部署步驟&#xff08;圖文詳解&#x…

deeplab運行指南

以下僅僅為一個總結&#xff0c;參考了網上的眾多資料&#xff0c;僅備忘記。 主要鏈接 deeplab主頁&#xff1a;http://liangchiehchen.com/projects/DeepLab.html官方代碼&#xff1a;https://bitbucket.org/aquariusjay/deeplab-public-ver2python 版caffe實現&#xff1a…

tensorboard使用_colab打不開tensorboard的解決辦法

2020.4.1更新&#xff1a;colab現在自帶tensorboard的魔術方法了&#xff0c;用這個命令就能展示tensorboard%load_ext tensorboard %tensorboard --logdir ./log/train# 加載一次后&#xff0c;如果要重新加載&#xff0c;就需要使用reload方法 %reload_ext tensorboard %tens…

構造函數為什么不能是虛函數 ( 轉載自C/C++程序員之家)

從存儲空間角度&#xff0c;虛函數對應一個指向vtable虛函數表的指針&#xff0c;這大家都知道&#xff0c;可是這個指向vtable的指針其實是存儲在對象的內存空間的。問題出來了&#xff0c;如果構造函數是虛的&#xff0c;就需要通過 vtable來調用&#xff0c;可是對象還沒有實…

小程序“自定義關鍵詞”功能的常見問答

我們知道小程序可以通過線下掃碼、公眾號、好友分享、長按小程序碼、搜索小程序名稱來找到&#xff0c;現在又多了一個新方式——小程序后臺新增自定義關鍵詞功能&#xff1a;已發布小程序的開發者&#xff0c;可提交最多10個與小程序業務相關的關鍵詞&#xff0c;幫助你的小程…

語義分割深度學習方法集錦

轉載&#xff1a;https://github.com/handong1587/handong1587.github.io/edit/master/_posts/deep_learning/2015-10-09-segmentation.md Papers Deep Joint Task Learning for Generic Object Extraction intro: NIPS 2014homepage: http://vision.sysu.edu.cn/projects/d…