原題連線:
考慮不同權重為
d 的倍數的邊組成的圖.f(
d)為此圖中。路徑總數量。由於m
≤50000
.明顯會出現重邊。
建議限制邊的數量或者使用鄰接矩陣存圖。
矩陣更為方便。
由於最初沒有考邊過多。使用了鍊錶+拓撲排序。**量較大。
#include
#include
#include
#include
#define maxm 50210
#define maxn 105
using
namespace
std;
typedef
long
long ll;
const
int p=1e9+7;
const
int p_=p-1;
struct io
void io_fread()
bool read(int &a)//返回false表示什麼也沒讀到
}a=0;
while(*ptop>l&&*ptop10+(*(ptop++)-'0');
if(ptop==pend) io_fread();
}return
true;
}}i;struct node
node()
}g[maxm];//返圖。方便topsort
struct edge
; edge(int to,int w,int l,int r):to(to),w(w),l(l),r(r){}
edge()
}e[maxn][20000];
vector
v[maxn];
int ginof[maxn];
int inof[maxn][maxn];
int mu[maxn]=,out[maxn],ans[maxn],dp[maxn];
int f[maxm][3],f2[maxm][3];
int name[maxn][maxn];
void add(edge &e,int deep)
void build(int t,int deep)//將deep調邊錄入t集合內
int &d=inof[t][e.from];
e.l=e[t][d].l;
e.r=d;
e[t][e[t][d].l].r=deep;
e[t][d].l=deep;
}void remove(int t,int deep)//刪除
int q[maxn],a[maxn];
void topsort(int n);
int slove(int d,int n);//d倍數權重的圖上計算邊數;
int clat();
int main ()
int &d=f[i][2],&b=name[f[i][0]][f[i][1]];
for(int j=0;j<(int)v[d].size();j++)
add(e[d][b],i);
}topsort(n);
for(int i=1;i<101;i++)ans[i]=slove(i,n);
int ans=clat();
printf("%d\n",ans);
i.read(t);
while(t--)
for(int i=0;iint d=v[y][i];
build(d,x);
}for(int j=1;jint &i=v[y][j];
ans-=mu[i]*ans[i];
if(ans<0)ans+=p;
if(ans>p_)ans-=p;
ans[i]=slove(i,n);
ans+=mu[i]*ans[i];
if(ans<0)ans+=p;
if(ans>p_)ans-=p;
}for(int j=1;jint &i=v[w][j];
if(y%i)
}printf("%d\n",ans);
}return0;}
void topsort(int n)
while(lint v=q[l++];
a[n--]=v;
for(int i=ginof[v];i;i=g[i].next)
}}int slove(int d,int n)
tmp+=dp[v];
if(tmp>p_)tmp-=p;
}return tmp;
}int clat()
return tmp;
}
51nod 1776 路徑計數
我們先把前兩種數給排好,排好之後會有 a b 1 個空隙可以填數,我們計算有 k 個空隙兩端都是相同字母的方案數 可以用列舉把第二種數分成幾段插進去來算,設這個方案數為 f k 然後對於一種有 k 個空隙的方案數,列舉剩下的 a b 1 k 個空隙填了 h 個 然後計算把 c 和 d 分成 k h ...
51Nod1967 路徑定向
給出乙個有向圖,要求給每條邊重定向,使得定向後出度等於入度的點最多,輸出答案和任意一種方案 input 第一行兩個正整數n,m,表示1 n號點與m條邊 接下來m行,每行兩個正整數xi,yi,表示存在一條有向邊從xi指向yi n 10 5,m 3 10 5,xi,yi n output 第一行乙個整數...
51NOD 1967 路徑定向
給出乙個有向圖,要求給每條邊重定向,使得定向後出度等於入度的點最多,輸出答案和任意一種方案.n 10 5,m 3 10 5,xi,yi n 考慮先當每條邊雙向。如果這個圖的所有點的度都是偶數,那麼尤拉路徑跑一下就行了 考慮度為奇數的點 連線所有度為奇數的點,使其成為偶數點,顯然不會影響正確性 留個坑...