日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【五校联考7day2】QYQ的图

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【五校联考7day2】QYQ的图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description
給你一個n個點,m條邊的無向圖,每個點有一個非負的權值ci,現在你需要選擇一些點,使得每一個點都滿足:
如果這個點沒有被選擇,則與它有邊相連的所有點都必須被選擇。
問:滿足上述條件的點集中,所有選擇的點的權值和最小是多少?
QYQ很快就解決了這個問題,但是他已經回到了左下角……沒有留下答案,現在只好請你來解決這個問題啦!

Input
從文件graph.in中輸入數據。
輸入的第一行包含兩個整數n,m
輸入的第二行包含n個整數,其中第i個整數代表ci
輸入的第三行到第m+2行,每行包含兩個整數u,v,代表點u和點v之間有一條邊

Output
輸出到文件graph.out中。
輸出的第一行包含一個整數,代表最小的權值和

Sample Input
3 1
1 2 3
3 1

Sample Output
1
樣例說明:
只選擇1號點,滿足題意

Data Constraint
對于20% 的數據:n<=10
對于40%的數據:n<=20
對于100%的數據:1<=n<=50, 1<=m<=500, 0<=c<=1000
圖中可能會有重邊,自環。
點的編號為1—n。

.
.
.
.
.
分許
直接搜索就好了,當然不要 O(2^n)那種,每次搜索的時候如果這
個點不選,就直接把與它相連的所有點選上,搜索的時候加入一些剪
枝,比如如果現在的結果已經比現在的最佳答案大了就直接不搜了。

.
.
.
.
.
.
程序:

#include<iostream> #include<cstdio> #include<cstring> using namespace std;int n,m,c[51],cnt=1,head[51],ans=2147483647,f[51];struct edge {int next,to; } a[1010];inline int read() {int d=0;char ch=getchar();while (ch<'0'||ch>'9') ch=getchar();while (ch>='0'&&ch<='9')d=(d<<3)+(d<<1)+ch-48,ch=getchar();return d; }void add(int x,int y) {a[cnt].next=head[x];a[cnt].to=y;head[x]=cnt++; }void dfs(int x,int sum) {if (sum>=ans) return;if (x>n){ans=min(ans,sum);return;}f[x]++;dfs(x+1,sum+c[x]);f[x]--;if (!f[x]){for (register int i=head[x];i;i=a[i].next)f[a[i].to]++;dfs(x+1,sum);for (register int i=head[x];i;i=a[i].next)f[a[i].to]--;} }int main() {freopen("graph.in","r",stdin);freopen("graph.out","w",stdout);n=read();m=read();for (register int i=1;i<=n;i++)c[i]=read();for (register int i=1;i<=m;i++){int x,y;x=read();y=read();if (x==y) f[x]++; else{add(x,y);add(y,x);}}dfs(1,0);printf("%d",ans);fclose(stdin);fclose(stdout);return 0; }

轉載于:https://www.cnblogs.com/YYC-0304/p/10458929.html

總結

以上是生活随笔為你收集整理的【五校联考7day2】QYQ的图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。