东方市网站建设_网站建设公司_UI设计师_seo优化
2026/1/11 18:12:16 网站建设 项目流程

2025年北京大学计算机考研复试机试真题

2025年北京大学计算机考研复试上机真题

历年北京大学计算机考研复试上机真题

历年北京大学计算机考研复试机试真题

更多学校完整题目开源地址:https://gitcode.com/u014339447/pgcode

01 最小生成树-北京大学

题目描述

给定一张n nn个点的完全图。

图中所有边的边权均为0 / 1 0/10/1,且有且仅有m mm条边边权为1 11

求解该完全图的最小生成树,你只需要输出最小生成树的边权和即可。

输入格式

第一行两个数字n nn,m mm表示点数,以及边权为1 11的边数。

( m ≤ min ⁡ { 200000 , n ( n − 1 ) 2 } ) (m \leq \min\{200000, \frac{n(n-1)}{2}\})(mmin{200000,2n(n1)})

接下来m mm行,一行两个数字a [ i ] a[i]a[i],b [ i ] b[i]b[i],表示连接a [ i ] a[i]a[i],b [ i ] b[i]b[i]的边,其边权为1 11( 1 ≤ a [ i ] < b [ i ] ≤ n ) (1 \leq a[i] < b[i] \leq n)(1a[i]<b[i]n)

保证输入的边两两不同。

输出格式

一行一个数字,表示最小生成树的边权和。

输入样例
6 11 1 3 1 4 1 5 1 6 2 3 2 4 2 5 2 6 3 4 3 5 3 6
输出样例
2
#include<iostream>#include<vector>usingnamespacestd;intmain(){intn,m;cin>>n>>m;vector<vector<int>>D(n+1,vector<int>(n+1,0));for(inti=0;i<m;i++){inta,b;cin>>a>>b;D[a][b]=1;D[b][a]=1;}intrecord[n+1]={0},count=1,sum=0;record[1]=1;while(count<n){intk=0,z=0;for(inti=1;i<=n;i++){if(record[i]==1){for(intj=1;j<=n;j++){if(record[j]==0){k=j;if(D[i][j]==0){z=1;break;}}}if(z==1)break;}}count++;record[k]=1;if(z==0)sum++;}cout<<sum;}

打怪救公主-北京大学

题目描述

公主被魔王抓起来关在了迷宫的某处,骑士想要拯救公主,也进入了迷宫。

但是魔王不会轻易让骑士拯救公主,魔王在迷宫中安排了许多怪兽。

每个怪兽都有血量,骑士也有初始血量 $ t $,骑士打败怪兽后血量的减少量为怪物的血量值,血量减到 $ 0 $,骑士会死去。

迷宫由 $ m \times n $ 个方块组成,每个方块有墙或者路或者怪物,骑士在其中一个方块上,他每个时间单位可以四个方向(上、下、左、右)走到相邻方格,若遇到怪物,必须打败怪物才能继续前进。

请帮忙判断骑士能否成功拯救公主,如果能,给出骑士还剩的最大血量。

输入格式

第一行为三个整数 $ m、 、n $ 和 $ t, ,t $ 表示骑士的初始血量。

第 $ 2 $ 至 $ m+1 $ 行描述了迷宫,迷宫以 $ m $ 行 $ n $ 列的方格组成,若方格为 $ . $ 则表示骑士可以通过,若方格为 $ # $ 则表示墙,骑士不能通过,若方格为数字则表示怪物,数字为怪物的血量,保证怪物的血量小于 $ 10 $(一位数)。

$ * $ 表示了骑士当前所在的位置,$ + $ 表示公主被囚禁的位置。

输出格式

若骑士能成功拯救公主,则输出骑士走到公主所囚禁方格所剩最大血量,否则输出 $ 0 $。

输入样例
5 6 10 ..*... .#2### 5#..4# .##9.# .#+..#
输出样例
4
#include<iostream>#include<queue>usingnamespacestd;intm,n,t;charmap[105][105];intvisit[105][105]={0};intdx[]={-1,1,0,0},dy[]={0,0,-1,1};structState{intx,y,hp;};intmain(){cin>>m>>n>>t;cin.ignore();charmap[m][n];intx1,y1,x2,y2;for(inti=0;i<m;i++){string line;getline(cin,line);for(intj=0;j<n;j++){map[i][j]=line[j];if(line[j]=='*')x1=i,y1=j;elseif(line[j]=='+')x2=i,y2=j;}}queue<State>q;q.push({x1,y1,t});visit[x1][y1]=t;intmax_hp=0;while(!q.empty()){auto[x,y,hp]=q.front();q.pop();if(x==x2&&y==y2){max_hp=max(max_hp,hp);continue;}for(intd=0;d<4;d++){intnx=x+dx[d],ny=y+dy[d],nhp=hp;if(nx<0||nx>=m||ny<0||ny>=n)continue;charc=map[nx][ny];if(c=='#')continue;if(isdigit(c)){nhp-=c-'0';if(nhp<=0)continue;}if(visit[nx][ny]<nhp){visit[nx][ny]=nhp;q.push({nx,ny,nhp});}}}cout<<max_hp<<endl;}

最低通行费-北京大学

题目描述

一个商人穿过一个N × N N \times NN×N的正方形的网格,去参加一个非常重要的商务活动。

他要从网格的左上角进,右下角出,每穿越中间1 11个小方格,都要花费1 11个单位时间。

商人必须在( 2 N − 1 ) (2N-1)(2N1)个单位时间穿越出去。

而在经过中间的每个小方格时,都需要缴纳一定的费用。

这个商人期望在规定时间内用最少费用穿越出去。

请问至少需要多少费用?

注意:不能对角穿越各个小方格(即,只能向上下左右四个方向移动且不能离开网格)。

输入格式

第一行是一个整数,表示正方形的宽度N NN( 1 ≤ N < 100 ) (1 \leq N < 100)(1N<100)

后面N NN行,每行N NN个不大于100 100100的整数,为网格上每个小方格的费用。

输出格式

输出一个整数,表示至少需要的费用。

输入样例
5 1 4 6 8 10 2 5 7 15 17 6 8 9 18 20 10 11 12 19 21 20 23 25 29 33
输出样例
109
#include<iostream>usingnamespacestd;intmain(){intn,map[105][105],dp[105][105];cin>>n;for(inti=0;i<n;i++)for(intj=0;j<n;j++){cin>>map[i][j];dp[i][j]=99999;}dp[0][0]=map[0][0];for(inti=0;i<n;i++){for(intj=0;j<n;j++){intfee=dp[i][j];if(i>0)fee=min(dp[i-1][j]+map[i][j],fee);if(j>0)fee=min(dp[i][j-1]+map[i][j],fee);dp[i][j]=fee;}}cout<<dp[n-1][n-1]<<endl;}

冰阔落-北京大学

题目描述

老王喜欢喝冰阔落 冰阔落冰阔落

初始时刻,桌面上有n nn杯阔落,编号为1 11n nn

老王总想把其中一杯阔落倒到另一杯中,这样他一次性就能喝很多很多阔落 阔落阔落,假设杯子的容量是足够大的。

m mm次操作,每次操作包含两个整数x xxy yy

若原始编号为x xx的阔落与原始编号为y yy的阔落已经在同一杯,请输出" Y e s " "Yes""Yes";否则,我们将原始编号为y yy所在杯子的所有阔落,倒往原始编号为x xx中的阔落所在的杯子,并输出" N o " "No""No"

最后,老王想知道哪些杯子有冰阔落 冰阔落冰阔落

输入格式

有多组测试数据,少于5 55组。

每组测试数据,第一行两个整数n nn,m mm(n nn,m mm<=50000 5000050000)。

接下来m mm行,每行两个整数x xx,y yy(1 11<=x xx,y yy<=n nn)。

输出格式

每组测试数据,前m mm行输出" Y e s " "Yes""Yes"或者" N o " "No""No"

m + 1 m+1m+1行输出一个整数,表示有阔落 阔落阔落的杯子数量。

m + 2 m+2m+2行有若干个整数,从小到大输出这些杯子的编号。

输入样例
3 2 1 2 2 1 4 2 1 2 4 3
输出样例
No Yes 2 1 3 No No 2 1 4
#include<iostream>#include<sstream>usingnamespacestd;intc[5][50010],result[5][50010];introot(intk,intnode){while(c[k][node]>0)node=c[k][node];returnnode;}intmain(){for(inti=0;i<5;i++)for(intj=0;j<50010;j++)c[i][j]=-1;intn,m,k=0;string line;while(getline(cin,line)){if(line.empty())break;stringstreamss(line);ss>>n>>m;intx,y;for(inti=1;i<=m;i++){cin>>x>>y;if(root(k,x)==root(k,y))result[k][i]=1;else{c[k][root(k,y)]=x;}}result[k][50001]=m,result[k][50002]=n;k++;cin.ignore();}for(inti=0;i<k;i++){for(intj=1;j<=result[i][50001];j++){if(result[i][j]==0)cout<<"No"<<endl;elsecout<<"Yes"<<endl;}intcount=0;for(intj=1;j<=result[i][50002];j++)if(c[i][j]<0)count++;cout<<count<<endl;for(intj=1;j<=result[i][50002];j++){if(c[i][j]<0){cout<<j;count--;if(count>0)cout<<" ";}}if(i<k-1)cout<<endl;}}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询