NOIp2002神经网络 【拓扑排序】By cellur925
2024-08-30 07:57:52
这道题目没有什么难的,是一道拓扑排序+递推的题目。我的思路是开始处理出拓扑序,然后因为数据范围很小怎么搞都可以,就邻接矩阵存图+暴力枚举。结果60分。
后来看题解发现,大家都是边拓扑边进行递推的,才发现自己这部分可能不对。另外的,就都是一些细节了==。
Code
#include<cstdio>
#include<algorithm>
#include<queue> using namespace std; int n,m,tot,cnt;
int c[],head[],cdu[],rdu[],seq[];
struct node{
int to,val,next;
}edge[]; void add(int x,int y,int z)
{
edge[++tot].to=y;
edge[tot].next=head[x];
edge[tot].val=z;
head[x]=tot;
} void topo()
{
queue<int>q;
for(int i=;i<=n;i++)
if(rdu[i]==) q.push(i);
while(!q.empty())
{
int x=q.front();q.pop();
seq[++cnt]=x;
for(int i=head[x];i;i=edge[i].next)
{
int y=edge[i].to;
if(--rdu[y]==) q.push(y);
if(c[x]>) c[y]+=edge[i].val*c[x];
}
}
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
int x=;
scanf("%d%d",&c[i],&x);
if(c[i]==) c[i]-=x;
}
for(int i=;i<=m;i++)
{
int x=,y=,z=;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);rdu[y]++;cdu[x]++;
}
topo();
bool flag=;
for(int i=;i<=n;i++)
if(cdu[i]==&&c[i]>) printf("%d %d\n",i,c[i]),flag=;
if(!flag) printf("NULL");
return ;
}
最新文章
- SQL 谜题(父亲的邮票)
- IE8兼容模式设置
- OpenNMS架构介绍
- URAL 1784 K - Rounders 找规律
- QString和char字符数组之间的转换(QTextCodec.toUnicode方法,特别注意\0的问题)
- ARM学习笔记8——通用寄存器和存储器内容交换指令和软中断指令
- EXCEL插件
- java线 生产者和消费者
- nodejs开发aspnet5项目
- LeetCode 167. Two Sum II - Input array is sorted (两数之和之二 - 输入的是有序数组)
- 如何去掉修改Joomla、joomlart及其模版版权、标志、图标的方法
- day09_request&;response学习笔记
- MTK(android init.rc) 写一个开机启动的服务
- Python-ccs高级选择器 盒模型
- html5-新布局元素header,footer
- gdb调试问题汇总
- L1-055 谁是赢家
- SRM480
- 20155320《网络对抗》MSF基础应用
- PAT 1001. A+B Format 解题