T1:模拟

自己第一天的简直跟白痴一样啊...模拟都会打错..

当时貌似在更新最大值的时候打逗比了...

if((sum[x]==max && x<maxh) || sum[x]>max){
  max=sum[x];
  maxh=x;

//现在(也就是9月+)再看,脑袋里只有sortsortsort,连最基本的更新最大指都忘了....智商唉....

附上代码:

#include<cstdio>
#include<cstring>
using namespace std;
int f[9]={10,8,6,5,4,3,2,1};
int n,m,x,max=0,maxh=10000100;
long long sum[1000001];
bool cmp(int a,int b){
return a>b;
}
int main(){
freopen("rank.in","r",stdin);
freopen("rank.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
for(int j=0;j<8;j++){
scanf("%d",&x);
sum[x]+=f[j];
if((sum[x]==max && x<maxh) || sum[x]>max){
max=sum[x];
maxh=x;
}
}
printf("%d\n",maxh);
}
return 0;
}

T2:拓扑排序

这是我在长乐学的第一个学到的东西...蒟蒻表示看懂了这个算法很开森..

当时由于我是一个记性特不好的人,越发的意识到写写题解的重要性!

首先先介绍一下拓扑排序吧

如果一个点y之前有另一个点x指向它,那么出渡c[x]++;入渡r[y]++;

c[]就表示x的出渡,也就是记录他指向多少个点;

r[]就表示y的入渡,也就是记录有多少点指向它;

这里还需要一个二维数组a[][]

让a[x][c[x]]=y;

也就是用来记录以x为起点,它所连的第c[x]个点是y;

理解了数组的含义,接下来模拟一下即可:

稍微讲一下思路吧:

1.选择一个入度为0的点存入ans[]里,输入;但是这里要注意若一开始就有多个点的入度为0,最后一个搜的点先输出。

2.删除和这个点有关联的边

3.ans里的指针tot--,如果存在入度为0的点,tot++;输出当前搜到的点,不然就输出之前存的;

4.while(num<n);

复杂度O(V+E);

模板代码:

for(int i=1;i<=m;i++){//m为关系的次数
scanf("%d%d",&x,&y);
c[x]++;
a[x][c[x]]=y;
r[y]++;
}
for(int i=1;i<=n;i++){//n为总的个数
if(r[i]==0) ans[++tot]=i;
}
while(num<n){
temp=ans[tot];
printf("%d",temp);//这里注意是从入渡为0的最后一个点先输出的
tot--;
num++;
for(int j=1;j<=c[temp];j++){
r[a[temp][j]]--;
}
for(int j=1;j<=n;j++){
if(r[a[temp][j]]==0){
tot++;
ans[tot]=j;
break;
}
}
}

当然这一道题吧,除了用拓扑之外,还需要注意判断是否满足条件

这里判断的方法是

1.如果不存在入渡为0的点,也就是存在一个环的时候,不满足条件

2.在拓扑过程中,找不到入度为0的点,也不满足;

PS:这里还需要注意一个题目中的小细节,也就是在入渡都为0的情况下,先输出号数比较小的;

//找到了就直接break这样可以保证找到的是最小的编号

附上ccy大神的注释:

//拓扑排序 给出注释
program event;
var
f:array[0..1001,0..1001] of boolean;
a:array[0..100000] of longint;
b:array[0..1001] of longint;
n,m,x,y,t,i,j,top:longint;
begin
fillchar(f,sizeof(f),false);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
readln(n,m);
for i:=1 to m do
begin
readln(x,y);
if not f[x,y] then//如果读入的关系没有重复
begin
f[x,y]:=true;//置为已用过
inc(a[y]);//对应的较晚发生的历史事件的入度递增
end;
end;
for i:=1 to n do
begin
t:=0;//用来判断是否有找到一个入度为0的节点
for j:=1 to n do
if a[j]=0 then
begin
t:=j;//如果找到了就直接break这样可以保证找到的是最小的编号
break;
end;
for j:=1 to n do
if f[t,j] then//如果这个点的出度对应的也存在
begin
dec(a[j]);//其出度递减
f[t,j]:=false;//这条线去除
end;
inc(top);//递增栈
b[top]:=t;//入栈
a[t]:=-1;//该节点的入度变成1
if t=0 then//如果t=0就代表没有将任何节点都找到 就直接输出错误信息退出
begin
writeln('Error!');
halt;
end;
end;
for i:=1 to top do writeln(b[i]);//从早到晚打印每一个历史事件
end.

这里没有按照书本上的模板打,但是思路相同,貌似ccy的打法会更简单直观一点...学习了

自己就不再重打一遍了

//这也给我一种很深的感悟吧。学习一种算法,牢记思想其实就足够了。

看模板代码有好有坏吧,好的一面是可以很清楚的知道它实际调用的过程,坏的一面是模板代码写多了很容易形成一种思维定势。。要懂得灵活变通才是王道

Day1:T1 模拟 T2 拓扑排序的更多相关文章

  1. UVA - 12263 Rankings 模拟(拓扑排序)

    题意:1~n这n个数,给你一个初始的顺序,再告诉你那两个数的大小关系发生了变化,求变化后的 顺序,不存在则输出IMPOSSIBLE 思路:这题很遗憾没在比赛的时候过掉,结束后加了一行就AC了.题目真的 ...

  2. Codeforces Round #285 (Div. 2) A B C 模拟 stl 拓扑排序

    A. Contest time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  3. UVA215-Spreadsheet Calculator(模拟+拓扑排序)

    Problem UVA215-Spreadsheet Calculator Accept:401  Submit:2013 Time Limit: 3000 mSec Problem Descript ...

  4. [ACM_模拟] POJ 1094 Sorting It All Out (拓扑排序+Floyd算法 判断关系是否矛盾或统一)

    Description An ascending sorted sequence of distinct values is one in which some form of a less-than ...

  5. 【noip模拟赛4】找啊找啊找BF 拓扑排序

    描述 sqybi上次找GF的工作十分不成功,于是依旧单身的他在光棍节前的某天突发奇想,要给自己找一个BF(这里指的是男性的好朋友……),这样既可以和人分享内心的压抑(路人甲:压抑还分享么……),也可以 ...

  6. NOIP2017 Day1 T3 逛公园(最短路+拓扑排序+DP)

    神tm比赛时多清个零就有60了T T 首先跑出1起点和n起点的最短路,因为k只有50,所以可以DP.设f[i][j]表示比最短路多走i的长度,到j的方案数. 我们发现如果在最短路上的和零边会有后向性, ...

  7. POJ——1308Is It A Tree?(模拟拓扑排序判断有向图是否为树)

    Is It A Tree? Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 28399   Accepted: 9684 De ...

  8. [JZOJ 5905] [NOIP2018模拟10.15] 黑暗之魂(darksoul) 解题报告 (拓扑排序+单调队列+无向图基环树)

    题目链接: http://172.16.0.132/senior/#main/show/5905 题目: oi_juruo热爱一款名叫黑暗之魂的游戏.在这个游戏中玩家要操纵一名有 点生命值的无火的余灰 ...

  9. [NOIP2015模拟10.27] 挑竹签 解题报告(拓扑排序)

    Description 挑竹签——小时候的游戏夏夜,早苗和诹访子在月光下玩起了挑竹签这一经典的游戏.挑竹签,就是在桌上摆上一把竹签,每次从最上层挑走一根竹签.如果动了其他的竹签,就要换对手来挑.在所有 ...

随机推荐

  1. sharepoint 2013 更改用户配置文件属性值的方法 modify user profile

    在此前写了两篇文章sharepoint 的UserProfile博客 sharepoint 2010 获取用户信息UserProfile方法 sharepoint 2010 怎样用SocialComm ...

  2. 关联A850刷机包 高级电源 时间中心 优化 ROOT 动力 美化 简化

    ROM简介 1.合并app以及framewok框架apk 2.破解安卓核心验证 3.加入busybox指令集 4.加入Root权限 5.时间居中显示.通知图标不会重叠 6.加入网速显示 7.加入%1精 ...

  3. (一)spring MVC基本概念和流程

    MVC的概念 Model(模型):包含数据和行为.不过现在一般都分离开来:Value Object(数据) 和 服务层(行为). View(视图):负责进行模型的展示,一般就是展示给用户的界面. Co ...

  4. Android - View Alpha值

    Android - View Alpha值 本文地址: http://blog.csdn.net/caroline_wendy Alpha值主要控制图像的透明度(0-1),0代表透明.1代表不透明. ...

  5. oracle处理节点之间的父子关系

    通常当与树的结构之间的关系处理,这是一个很复杂的事情,我们可以通过程序代码去逐层遍历父或子节点,这样做的缺点是很明显,效率不高,操作复杂性是比较大的.而当我们使用Oracle当数据库,我们可以有一个简 ...

  6. Linux开发环境的搭建和使用——Linux本必备软件SSH

    SSH 至 Secure Shell 缩写.由 IETF 网络工作组(Network Working Group)开发:SSH 以建立应用层和传输层安全协议中的基础上. SSH 是眼下较可靠,专为远程 ...

  7. asp.net webform easyui

    建议使用   html 页面 和 一般处理程序,一般处理程序 继承 IRequiresSessionState  ,才能用 session .

  8. struts2文件下载 <result type="stream">

    <!--struts.xml配置--> <action name="download" class="com.unmi.action.DownloadA ...

  9. 给phpcms v9加入一个主题radio无线电button,它可反复使用,以创建不同的专题部分内容编辑器,添加一个主题来定义自己的领域

    1. 2. 找到 phpcms\modules\special\templates中的special_add.tpl.php和special_edit.tpl.php文件 special_add.tp ...

  10. 非常多人不愿意承认汉澳sinox已经超过windows

    汉澳sinox採用的zfs和jail打造高可靠性存储server和矩阵计算机,这不是windows和linux能相提并论的. 只是非常多人立即出来出来反驳说,windows驱动程序多(就是支持硬件多) ...