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. tomcat version

    Tomcat version 6.0 only supports J2EE 1.2, 1.3, 1.4, and Java EE 5 Web modules   转自:http://jingwang0 ...

  2. C++:用成员初始化列表对数据成员初始化

    1.在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行. 例如: class Complex{ private: double real; double imag; public: Co ...

  3. shell脚本 -d 是目录文件,那么-e,-f等说明

    -e filename 如果 filename存在,则为真 -d filename 如果 filename为目录,则为真 -f filename 如果 filename为常规文件,则为真 -L fil ...

  4. 基于nginx的tomcat负载均衡和集群

    要集群tomcat主要是解决SESSION共享的问题,因此我利用memcached来保存session,多台TOMCAT服务器即可共享SESSION了. 你可以自己写tomcat的扩展来保存SESSI ...

  5. mysql字符串区分大小写的问题

    一.1. CREATE TABLE NAME(name VARCHAR(10)); 对这个表,缺省情况下,下面两个查询的结果是一样的: SELECT * FROM TABLE NAME WHERE n ...

  6. RecyclerView(6)自定义RecyclerView.LayoutManager

    A LayoutManager is responsible for measuring and positioning item views within a RecyclerView as wel ...

  7. NDK(13)JNIEnv和JavaVM

    转自:  http://www.cnblogs.com/canphp/archive/2012/11/13/2768937.html JNIEnv是一个与线程相关的变量,不同线程的JNIEnv彼此独立 ...

  8. git终端提示符

    最近使用git bash的时候,看到默认的终端提示符不爽,主要是太长了.所以想对git终端提示符进行优化 默认git的终端提示符会是  用户名@设备名称 ,我想改成更短的来查看. 提示符是由一个环境变 ...

  9. TCP建立连接和释放的过程,及TCP状态变迁图

    一.TCP报文格式 下面是TCP报文格式图: 重要字段介绍: (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记. (2)确认序号:Ack序号,占 ...

  10. 带你走进EJB--那些跟EJB容器相关的那些Java概念

    最近在对EJB的相关内容进行总结,在总结的过程中发现对容器的概念并不是很理解,因为EJB本身就是一个容器,但是容器到底是用来做什么的?它跟我们之前所了解的组件,框架,包,类等都有什么关系?接下来主要是 ...