做网站 万户,中小企业网络设计论文,用dw如何做网站首页,做策划的网站推广题目描述 一条单向的铁路线上#xff0c;依次有编号为 1, 2, …, n1,2,…,n的 nn个火车站。每个火车站都有一个级别#xff0c;最低为 11 级。现有若干趟车次在这条线路上行驶#xff0c;每一趟都满足如下要求#xff1a;如果这趟车次停靠了火车站 xx#xff0c;则始发站、… 题目描述 一条单向的铁路线上依次有编号为 1, 2, …, n1,2,…,n的 nn个火车站。每个火车站都有一个级别最低为 11 级。现有若干趟车次在这条线路上行驶每一趟都满足如下要求如果这趟车次停靠了火车站 xx则始发站、终点站之间所有级别大于等于火车站xx 的都必须停靠。注意起始站和终点站自然也算作事先已知需要停靠的站点 例如下表是55趟车次的运行情况。其中前44 趟车次均满足要求而第 55 趟车次由于停靠了 33 号火车站22 级却未停靠途经的 66 号火车站亦为 22 级而不满足要求。 现有 mm 趟车次的运行情况全部满足要求试推算这nn 个火车站至少分为几个不同的级别。 输入输出格式 输入格式 第一行包含 22 个正整数 n, mn,m用一个空格隔开。 第 i 1i1 行(1 ≤ i ≤ m)(1≤i≤m)中首先是一个正整数 s_i(2 ≤ s_i ≤ n)si(2≤si≤n)表示第ii 趟车次有 s_isi 个停靠站接下来有s_isi个正整数表示所有停靠站的编号从小到大排列。每两个数之间用一个空格隔开。输入保证所有的车次都满足要求。 输出格式 一个正整数即 nn 个火车站最少划分的级别数。 一开始写了一个差分约束跑了个最长路结果建边写挂了。 后来就写了一个topo排序重点在连边。 #include iostream
#include cstdio
#include cstring
#include queue
#include cstdlib
#include algorithm
#define REP(i,k,n) for(int ik;in;i)
#define in(a) aread()
#define MAXN 1010
using namespace std;
typedef pairint,int P;
inline int read(){
int x0,f1;
char chgetchar();
for(;!isdigit(ch);chgetchar())
if(ch-)
f-1;
for(;isdigit(ch);chgetchar())
xx*10ch-0;
return f*x;
}
struct node{
int a,b;
};
int n,m,s,x,t;
int total0,head[MAXN],nxt[MAXN10],to[MAXN10],val[MAXN10];
int du[MAXN],ans;
int a[MAXN],is[MAXN];
int dis[MAXN],vis[MAXN];
int book[MAXN][MAXN];
queue int Q;
inline void adl(int a,int b){
total;
du[b];
to[total]b;
nxt[total]head[a];
head[a]total;
return ;
}
inline void topo(){
while(!Q.empty()){
int uQ.front();
Q.pop();
for(int ehead[u];e;enxt[e]){
du[to[e]]--;
dis[to[e]]dis[u]1;
ansmax(ans,dis[to[e]]);
if(!du[to[e]])
Q.push(to[e]);
}
}
return ;
}
int main(){
in(n);in(m);
REP(i,1,m){
memset(a,0,sizeof(a));
memset(is,0,sizeof(is));
in(s),t0;
REP(j,1,s)
in(a[j]),is[a[j]]1;
REP(j,a[1]1,a[s]){
if(is[j]) continue;
REP(k,1,s)
if(!book[j][a[k]]){
book[j][a[k]]1;
adl(j,a[k]);
}
}
}
REP(i,1,n)
if(!du[i])
vis[i]1,dis[i]1,Q.push(i);
topo();
coutans;
return 0;
}