浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题
題目鏈接? ?引用自晴神OJ
A - 邊覆蓋
B - 極大獨立集
C - 穩定婚姻問題
D - 笛卡爾樹
沒趕得上全程的比賽,就做了兩道,后面兩道以后有時間再補。兩道都是概念題,比較基礎~ 以下是題解
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
對一個給定的無向圖G(V,E),邊集E'是E的子集。如果V中的所有頂點都在E'中出現過,那么稱邊集E'是圖G的一個邊覆蓋(Edge Cover)。
(以上定義引自https://en.wikipedia.org/wiki/Edge_cover)
根據上面的定義,請判斷一些給定的邊集是否是給定的無向圖的邊覆蓋。
Input
每個輸入文件一組數據。
第一行為兩個整數N、M(1<=N<=500, 1<=M<=N*(N-1)/2),分別表示無向圖的頂點數和邊數。假設圖上的頂點編號為從1到N。
接下來M行,每行兩個正整數u、v(1<=u,v<=N, u!=v),分別表示一條無向邊的兩個端點。數據保證沒有重邊。
接著一個正整數K(K<=10),表示查詢的個數。
然后是K個查詢,每個查詢第一行為一個正整數L(L<=M),表示欲查詢邊集E'中的邊數;接下來L行,每行兩個整數,表示邊集E'中的一條邊。數據保證E'一定是E的子集。
Output
每個查詢一行,如果欲查詢邊集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浙大考研機試模擬賽
分析:題目是中文題,意思是輸入一堆邊,看這些邊是否將所有頂點都覆蓋到了。只需要在每次查詢輸入后,將邊所連的頂點置為已訪問,再遍歷一次訪問數組即可。
#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 -?極大獨立集
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
對一個給定的無向圖G(V,E),點集V'是V的子集。如果V'中的任意兩個頂點之間都沒有邊,就稱點集V'是圖G的獨立集(Independent Set)。在此基礎上,如果往V'中添加任何一個在V中但不在V'中的頂點,都會使V'變成非獨立集,那么就稱V'是圖G的極大獨立集(Maximal Independent Set)。
(以上定義引自https://en.wikipedia.org/wiki/Independent_set_(graph_theory))
根據上面的定義,請判斷一些給定的點集是否是給定的無向圖的極大獨立集。
Input
每個輸入文件一組數據。
第一行為兩個整數N、M(1<=N<=500, 1<=M<=N*(N-1)/2),分別表示無向圖的頂點數和邊數。假設圖上的頂點編號為從1到N。
接下來M行,每行兩個正整數u、v(1<=u,v<=N, u!=v),分別表示一條無向邊的兩個端點。數據保證沒有重邊。
接著一個正整數K(K<=10),表示查詢的個數。
然后是K個查詢,每個查詢第一行為一個正整數L(L<=N),表示欲查詢點集V'的頂點個數;第二行為用空格隔開的L個正整數,表示V'中的頂點編號。數據保證V'一定是V的子集。
Output
每個查詢一行,如果欲查詢的點集不是圖G的獨立集,那么輸出Not an Independent Set;如果欲查詢的點集是圖G的獨立集但不是極大獨立集,那么輸出Not Maximal;如果欲查詢的點集是圖G的極大獨立集,輸出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浙大考研機試模擬賽
分析:判斷是否是極大獨立集,根據定義一個獨立集是指任意兩個頂點之間都沒有邊的點集,所謂最大就是加入任意一個頂點都會“破壞”獨立集。先判斷是否是獨立集,然后再枚舉每一個未在點集中的點,判斷是否在加入后會“破壞”獨立集。注意到樣例中已經給出了坑點,即1和4僅是獨立集不是最大獨立集,因為加入3后仍然是一個獨立集,知道這點以后就可以輕松解決了。
#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
總結
以上是生活随笔為你收集整理的浙大JAVA实验题12_2019浙大计算机考研机试模拟赛(2)——概念专题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑CPU性能怎么提高 系统设置提升CP
- 下一篇: oracle的dtime,Oracle时