浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题
題目鏈接? ?引用自晴神OJ
A - 邊覆蓋
B - 極大獨(dú)立集
C - 穩(wěn)定婚姻問(wèn)題
D - 笛卡爾樹(shù)
沒(méi)趕得上全程的比賽,就做了兩道,后面兩道以后有時(shí)間再補(bǔ)。兩道都是概念題,比較基礎(chǔ)~ 以下是題解
A -?邊覆蓋
Case Time Limit:?200?MS (Others) /?400?MS (Java) ??????Case Memory Limit:?256?MB (Others) /?512?MB (Java)
Accepted:
199??????Total Submission:
362
Problem Description
對(duì)一個(gè)給定的無(wú)向圖G(V,E),邊集E'是E的子集。如果V中的所有頂點(diǎn)都在E'中出現(xiàn)過(guò),那么稱邊集E'是圖G的一個(gè)邊覆蓋(Edge Cover)。
(以上定義引自https://en.wikipedia.org/wiki/Edge_cover)
根據(jù)上面的定義,請(qǐng)判斷一些給定的邊集是否是給定的無(wú)向圖的邊覆蓋。
Input
每個(gè)輸入文件一組數(shù)據(jù)。
第一行為兩個(gè)整數(shù)N、M(1<=N<=500, 1<=M<=N*(N-1)/2),分別表示無(wú)向圖的頂點(diǎn)數(shù)和邊數(shù)。假設(shè)圖上的頂點(diǎn)編號(hào)為從1到N。
接下來(lái)M行,每行兩個(gè)正整數(shù)u、v(1<=u,v<=N, u!=v),分別表示一條無(wú)向邊的兩個(gè)端點(diǎn)。數(shù)據(jù)保證沒(méi)有重邊。
接著一個(gè)正整數(shù)K(K<=10),表示查詢的個(gè)數(shù)。
然后是K個(gè)查詢,每個(gè)查詢第一行為一個(gè)正整數(shù)L(L<=M),表示欲查詢邊集E'中的邊數(shù);接下來(lái)L行,每行兩個(gè)整數(shù),表示邊集E'中的一條邊。數(shù)據(jù)保證E'一定是E的子集。
Output
每個(gè)查詢一行,如果欲查詢邊集E'不是圖G的邊覆蓋,那么輸出No;否則輸出Yes。
Sample Input
6 7
1 2
1 3
2 3
2 4
3 5
4 5
4 6
3
3
1 2
3 5
4 6
4
1 2
2 3
4 5
4 6
3
1 2
2 3
4 6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Sample Output
Yes
Yes
No
Author
Shoutmon
Source
19浙大考研機(jī)試模擬賽
分析:題目是中文題,意思是輸入一堆邊,看這些邊是否將所有頂點(diǎn)都覆蓋到了。只需要在每次查詢輸入后,將邊所連的頂點(diǎn)置為已訪問(wèn),再遍歷一次訪問(wèn)數(shù)組即可。
#include #include#include#include#include#include#include
using namespacestd;const int maxn=510;intG[maxn][maxn];boolvis[maxn];intmain()
{//freopen("1.txt","r",stdin);
intn,m;
cin>>n>>m;intu,v;for(int i=0;i
scanf("%d%d",&u,&v);
G[u][v]=1;
G[v][u]=1;
}intk;
cin>>k;while(k--){intL;
scanf("%d",&L);
memset(vis,0,sizeof(vis));for(int i=0;i
scanf("%d%d",&u,&v);
vis[u]=true;
vis[v]=true;
}intj;for(j=1;j<=n;j++){if(vis[j]==false){
printf("No\n");break;
}
}if(j==n+1) printf("Yes\n");
}return 0;
}
View Code
B -?極大獨(dú)立集
Case Time Limit:?100?MS (Others) /?200?MS (Java) ??????Case Memory Limit:?256?MB (Others) /?512?MB (Java)
Accepted:
140??????Total Submission:
303
Problem Description
對(duì)一個(gè)給定的無(wú)向圖G(V,E),點(diǎn)集V'是V的子集。如果V'中的任意兩個(gè)頂點(diǎn)之間都沒(méi)有邊,就稱點(diǎn)集V'是圖G的獨(dú)立集(Independent Set)。在此基礎(chǔ)上,如果往V'中添加任何一個(gè)在V中但不在V'中的頂點(diǎn),都會(huì)使V'變成非獨(dú)立集,那么就稱V'是圖G的極大獨(dú)立集(Maximal Independent Set)。
(以上定義引自https://en.wikipedia.org/wiki/Independent_set_(graph_theory))
根據(jù)上面的定義,請(qǐng)判斷一些給定的點(diǎn)集是否是給定的無(wú)向圖的極大獨(dú)立集。
Input
每個(gè)輸入文件一組數(shù)據(jù)。
第一行為兩個(gè)整數(shù)N、M(1<=N<=500, 1<=M<=N*(N-1)/2),分別表示無(wú)向圖的頂點(diǎn)數(shù)和邊數(shù)。假設(shè)圖上的頂點(diǎn)編號(hào)為從1到N。
接下來(lái)M行,每行兩個(gè)正整數(shù)u、v(1<=u,v<=N, u!=v),分別表示一條無(wú)向邊的兩個(gè)端點(diǎn)。數(shù)據(jù)保證沒(méi)有重邊。
接著一個(gè)正整數(shù)K(K<=10),表示查詢的個(gè)數(shù)。
然后是K個(gè)查詢,每個(gè)查詢第一行為一個(gè)正整數(shù)L(L<=N),表示欲查詢點(diǎn)集V'的頂點(diǎn)個(gè)數(shù);第二行為用空格隔開(kāi)的L個(gè)正整數(shù),表示V'中的頂點(diǎn)編號(hào)。數(shù)據(jù)保證V'一定是V的子集。
Output
每個(gè)查詢一行,如果欲查詢的點(diǎn)集不是圖G的獨(dú)立集,那么輸出Not an Independent Set;如果欲查詢的點(diǎn)集是圖G的獨(dú)立集但不是極大獨(dú)立集,那么輸出Not Maximal;如果欲查詢的點(diǎn)集是圖G的極大獨(dú)立集,輸出Yes。
Sample Input
6 5
1 2
2 3
2 4
4 5
4 6
3
2
1 4
3
1 3 4
3
1 2 4
Sample Output
Not Maximal
Yes
Not an Independent Set
Author
Shoutmon
Source
19浙大考研機(jī)試模擬賽
分析:判斷是否是極大獨(dú)立集,根據(jù)定義一個(gè)獨(dú)立集是指任意兩個(gè)頂點(diǎn)之間都沒(méi)有邊的點(diǎn)集,所謂最大就是加入任意一個(gè)頂點(diǎn)都會(huì)“破壞”獨(dú)立集。先判斷是否是獨(dú)立集,然后再枚舉每一個(gè)未在點(diǎn)集中的點(diǎn),判斷是否在加入后會(huì)“破壞”獨(dú)立集。注意到樣例中已經(jīng)給出了坑點(diǎn),即1和4僅是獨(dú)立集不是最大獨(dú)立集,因?yàn)榧尤?后仍然是一個(gè)獨(dú)立集,知道這點(diǎn)以后就可以輕松解決了。
#include #include#include#include#include#include#include
using namespacestd;const int maxn=510;int G[maxn][maxn]={0};boolvis[maxn];intmain()
{//freopen("1.txt","r",stdin);
intn,m;
cin>>n>>m;intu,v;for(int i=0;i
scanf("%d%d",&u,&v);
G[u][v]=G[v][u]=1;
}intK;
scanf("%d",&K);
loop:while(K--){intL;
scanf("%d",&L);
vectorvec;inttemp;
memset(vis,0,sizeof(vis));for(int i=0;i
scanf("%d",&temp);
vec.push_back(temp);
vis[temp]=true;
}for(int i=0;i
cout<
}
}
}bool flag=false;for(int i=1;i<=n;i++){if(vis[i]==false){intj;for(j=0;j
}
}if(j==vec.size()){
cout<
flag=true;gotoloop;
}
}
}if(!flag) cout<
}return 0;
}
View Code
總結(jié)
以上是生活随笔為你收集整理的浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 电脑CPU性能怎么提高 系统设置提升CP
- 下一篇: oracle的dtime,Oracle时