1021:

 #include<stdio.h>
#include<string.h>
#include<vector>
#include<queue>
using namespace std; #define N 10005
vector<int> v[N];
queue<int> q;
int tree[N],h[N],dis[N],vis[N];
int n,maxh; int findroot(int x){
if(tree[x]==-)
return x;
else{
int tmp=findroot(tree[x]);
tree[x]=tmp;
return tmp;
}
}
void merge(int x,int y){
x=findroot(x);
y=findroot(y);
if(x!=y){
tree[x]=y;
}
}
int bfs(int p){
int height=;;
int i,j,k;
while(!q.empty())
q.pop();
memset(dis,,sizeof(dis));
memset(vis,,sizeof(vis));
q.push(p);
vis[p]=;
while(!q.empty()){
k=q.front();
q.pop();
for(i=;i<v[k].size();i++){
if(!vis[v[k][i]]){
dis[v[k][i]]=dis[k]+;
if(height<dis[v[k][i]]) height=dis[v[k][i]];
q.push(v[k][i]);
vis[v[k][i]]=;
}
}
}
if(maxh<height)
maxh=height;
return height; }
int main(){
freopen("in2.txt","r",stdin);
int x,y;
int i,j;
scanf("%d",&n);
for(i=;i<N;i++)
tree[i]=-;
for(i=;i<n;i++){
scanf("%d %d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
merge(x,y);
}
int cnt=;
maxh=;
for(i=;i<=n;i++){
if(tree[i]==-)
cnt++;
}
if(cnt==){
for(i=;i<=n;i++){
h[i]=bfs(i);
}
for(i=;i<=n;i++){
if(h[i]==maxh)
printf("%d\n",i);
} }
else
printf("Error: %d components",cnt); return ;
}

对我来说挑战非常大的一道题,看了很多资料,看了很多方法,找到一个适合自己的代码,一直研究才弄的差不多。。

首先是利用并查集来判断连通分量的个数,这是一个很经典也很方便的方法,希望以后自己能多利用。非常好用,思路也不难。就是利用双亲表示法来表示树,把相关的合并在一起,然后递归找双亲节点,都是固定的东西。

然后就是bfs的东西,这个一直没接触过,第一次还是有很大的压力。各种各样的问题。希望以后再有深刻理解。其实思路并不难,关键是注意细节。

1022:

 #include<stdio.h>
#include<iostream>
#include<string.h>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
#define N 10005
struct book{
char id[];
char title[];
char author[];
char key[];
vector<string> keys;
char publish[];
char year[];
};
vector<book> v;
int n,m;
bool cmp(book a,book b){
if(strcmp(a.id,b.id)<)
return true;
else
return false;
}
void search(char *query){
int i,j;
char t[];
int r=,flag=;
memset(t,'\0',sizeof(t));
for(i=;i<strlen(query);i++)
t[i]=query[i+];
printf("%s\n",query);
for(i=;i<n;i++){
flag=;
switch(query[]){
case '': strcmp(t,v[i].title)==?flag=:r++; break;
case '': strcmp(t,v[i].author)==?flag=:r++; break;
case '': strcmp(t,v[i].publish)==?flag=:r++; break;
case '': strcmp(t,v[i].year)==?flag=:r++; break;
case '': {
for(j=;j<v[i].keys.size();j++){
t==v[i].keys[j]?flag=:r++;
}break;
}
} if(flag!=)
printf("%s\n",v[i].id); }
if(flag==&&r>=n)
printf("Not Found\n");
}
int main(){
freopen("in.txt","r",stdin);
int i=,j=,k=;
char temp[];
scanf("%d",&n);
getchar();
for(i=;i<n;i++){
struct book b;
gets(b.id);
gets(b.title);
gets(b.author);
while(cin>>temp){
b.keys.push_back(temp);
if(cin.get()=='\n')
break;
}
gets(b.publish);
gets(b.year);
v.push_back(b);
}
sort(v.begin(),v.end(),cmp); scanf("%d",&m);
getchar();
for(i=;i<m;i++){
char query[];
memset(query,'\0',sizeof(query));
gets(query);
search(query);
}
return ;
}

感觉有点伤到了。。本来不是复杂的问题,全都是关于输入的问题,然后是相同的项查找问题。。

c语言的输入字符串处理实在是能力有限,感觉受不了了。。排序也没有记清楚,这个记住吧。。然后是后来的相同项处理显得笨拙,还是别人的代码写的好一些。。

1023:

 #include<stdio.h>
#include<string.h>
int x[];
int y[];
int main(){
long long n,m;
int i,j,t;
char a[],b[];
memset(x,,sizeof(y));
memset(y,,sizeof(y));
memset(a,'\0',sizeof(a));
memset(b,'\0',sizeof(b));
scanf("%s",a);
sscanf(a,"%lld",&n);
for(i=;i<strlen(a);i++){
t=a[i]-'';
x[t]++;
}
m=n*;
sprintf(b,"%lld",m);
for(i=;i<strlen(b);i++){
t=b[i]-'';
y[t]++;
}
int equal=;
for(i=;i<;i++){
if(x[i]!=y[i]){
equal=;
break;
}
}
if(equal==)
printf("No\n%s\n",b);
else{
printf("Yes\n%s\n",b);
}
}

挺简单的一道题,感觉自己全队的,就是有组过不了,不知道为什么,应该是字符串转数字的问题吧。。

思路没什么问题,我的方法貌似还简单一些。。

A题进行时--浙大PAT 1021-1030的更多相关文章

  1. A题进行时--浙大PAT 1001-1010

    pat链接:http://pat.zju.edu.cn 1 #include<stdio.h> 2 int main(){ 3 int a,b; 4 int c; 5 while(scan ...

  2. A题进行时--浙大PAT 1011-1020

    #include<stdio.h> #include<string.h> int main(){ ]; ]; ]; ]; ]; int i; float sum; memset ...

  3. 浙大PAT CCCC L3-013 非常弹的球 ( 高中物理题 )

    题目链接 题意 : 刚上高一的森森为了学好物理,买了一个“非常弹”的球.虽然说是非常弹的球,其实也就是一般的弹力球而已.森森玩了一会儿弹力球后突然想到,假如他在地上用力弹球,球最远能弹到多远去呢?他不 ...

  4. 浙大 PAT 乙级 1001-1075 目录索引

    1001. 害死人不偿命的(3n+1)猜想 1002. 写出这个数 1003. 我要通过! 1004. 成绩排名 1005. 继续(3n+1)猜想 1006. 换个格式输出整数 1007. 素数对猜想 ...

  5. PAT 乙级1030 完美数列(25) C++版

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  6. PAT乙级 1030. 完美数列(25)

    1030. 完美数列(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正整数数列,和正整数p,设这 ...

  7. PAT 1021

    1021. Deepest Root (25) A graph which is connected and acyclic can be considered a tree. The height ...

  8. 浙大 pat 1047题解

    1047. Student List for Course (25) 时间限制 400 ms 内存限制 64000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...

  9. 浙大pat 1037

    1037. Magic Coupon (25) 时间限制 100 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The magi ...

随机推荐

  1. PowerDesigner概念模型的Notation设置

    原文:PowerDesigner概念模型的Notation设置 在进行数据库设计模型时,分为概念模型设计和物理模型设计两种,概念模型主要是反映真是 世界中的业务关系,也就是我们常用的实体关系图.物理模 ...

  2. ipc$漏洞利用实例

    一.什么是IPC$ IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道, 通过提供可信任的用户名和口令 ...

  3. Android Andbase应用开发框架

    [运行说明]运行AndbaseDemo需要将文件中的Andbase库Add进demo中.1.andbase中包含了大量的开发常用手段.如网络下载,多线程与线程池的管理,数据库ORM,图片缓存管理,图片 ...

  4. 【c++】中文设置

    #include <iostream> #include <string> #include<locale> using namespace std; ; int ...

  5. 关于为什么java需要垃圾回收

    为什么java采用垃圾回收而c++却不采用,这是因为在java中,所有对象变量都是引用,当一个引用被新对象覆盖掉时,就没有引用指向原来的对象了,这个对象就“失控了”. 而C++中,除非使用特殊符号&a ...

  6. Android开发之关于ListView中adapter调用notifyDataSetChanged无效的原因

    1.数据源没有更新,调用notifyDataSetChanged无效. 2.数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效. 3.数据源更新了,但是adpter没有 ...

  7. poj 3792 Area of Polycubes (简单模拟)

    题目 题意:在三维坐标系中,给定n个立方体的中心坐标,立方体的边长为1,按照输入顺序,后来输入的必须和之前输入的立方体有公共的边. 而且,不能和之前输入的立方体相同. 如果满足条件,输出表面积.如果不 ...

  8. CodeForces 489B (贪心 或 最大匹配) BerSU Ball

    题意: 有m个男孩和n个女孩,每个人都有一个舞蹈熟练度,用一个不超过100的正整数来表示. 一个男孩和一个女孩能够结为舞伴当且仅当两人的熟练度相差不超过1. 问最多能结成多少对舞伴 分析: 这是一个二 ...

  9. Asp.Net读写XML简单方法

    xml文件 <?xml version="1.0" encoding="utf-8"?> <book> <title>web ...

  10. jQuery避免$符和其他JS库冲突的方法对比

    1.如果jquery库在第三方库之后引用.这个时候jquery库会占用$. 解决办法:剔除$符号的使用权. <script type="text/javascript" sr ...