/*C(n,k)*/#include#include #include #define ll long long#define N 1000007#define M 1000000007using namespace std;ll n,k,ans,cnt1,cnt0;ll inv[N]={ 1,1},fac[N]={ 1,1},f[N]={ 1,1};inline ll read(){ int x=0,f=1;char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}inline void init(){ for(int i=2;i<=N;i++) { fac[i]=(fac[i-1]%M*i%M)%M; f[i]=((M-M/i)%M*f[M%i])%M; inv[i]=(inv[i-1]*f[i]%M)%M; }}inline ll C(ll a,ll b){ return fac[a]%M*inv[b]%M*inv[a-b]%M;}int main(){ freopen("cube.in","r",stdin); freopen("cube.out","w",stdout); n=read();k=read();init(); printf("%I64d\n",C(n,k)); return 0;}
/*做最大生成树时标记哪些边被加了进去。然后把这些边排序。如果询问权值w的货物,就在边中查找小于w的最大值假设拍第k大答案就是k+1。 复杂度O(qlogn) */#include#include #include #include #define N 100007using namespace std;int n,m,q,ans,cnt,num;int head[N],fa[N];struct edge{ int u,v,w,net,pos; bool operator < (const edge &a) const{ return w>a.w; }}e[N<<1],E[N],tmp[N<<1];inline int read(){ int x=0,f=1;char c=getchar(); while(c>'9'||c<'0'){ if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return x*f;}inline void add(int u,int v,int w){ e[++cnt].u=u;e[cnt].v=v;e[cnt].w=w; e[cnt].net=head[u];head[u]=cnt;}int find(int x){ return fa[x]==x?x:fa[x]=find(fa[x]);}void kruskal(){ int r1,r2; sort(E+1,E+m+1); for(int i=1;i<=m;i++) { r1=find(E[i].u),r2=find(E[i].v); if(r1==r2)continue; fa[r1]=r2;num++; add(E[i].u,E[i].v,E[i].w);add(E[i].v,E[i].u,E[i].w); tmp[num].pos=num;tmp[num].u=E[i].u,tmp[num].v=E[i].v;tmp[num].w=E[i].w; if(num==n-1) break; }}int serch(int x){ int l=1,r=n-1,mid; while(l<=r) { mid=l+r>>1; if(tmp[mid].w>=x) l=mid+1; else ans=mid,r=mid-1; }return num-ans+1;}int main(){ freopen("warehouse.in","r",stdin); freopen("warehouse.out","w",stdout); int x,y,z,k; n=read();m=read();q=read(); for(int i=1;i<=n;i++) fa[i]=i; for(int i=1;i<=m;i++) { E[i].u=read();E[i].v=read();E[i].w=read(); }kruskal(); for(int i=1;i<=q;i++) { x=read(); if(x<=e[cnt].w){printf("1\n");continue;} if(x>e[1].w){printf("%d\n",n);continue;} k=serch(x); printf("%d\n",k+1); } return 0;}